题解 | #牛群的编码反转#
牛群的编码反转
https://www.nowcoder.com/practice/fbbef1b8d84b45a49f95ebf63a3b353b
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int reverseBits (int n) {
if(n == Integer.MIN_VALUE){
return 1 ;
}else if(n == 1){
return Integer.MIN_VALUE ;
}else{
int[] b = new int[32] ;
if(n < 0){
n = -n ;
b[0] = 1 ;
int p = 31 ;
while(n > 0){
b[p--] = n%2 ;
n/=2 ;
}
for(int i = 1;i <= 31;i++){
b[i] ^= 1 ;
}
int c = 1 ;
for(int i = 31;i >= 0 && c > 0;i--){
b[i] ^= 1 ;
c = b[i] & 1 ;
}
}else{
int p = 31 ;
while(n > 0){
b[p--] = n%2 ;
n/=2 ;
}
}
for(int i = 0;i < 32/2;i++){
int tmp = b[i] ;
b[i] = b[31-i] ;
b[31-i] = tmp ;
}
if(b[0] == 0){
int ans = 0 ;
for(int i = 1;i <= 31;i++){
if(b[i] > 0){
ans += (1<<(31-i)) ;
}
}
return ans ;
}else{
int c = 1;
for(int i = 31;i > 0 && c > 0;i--){
if(b[i] == 0){
b[i] = 1 ;
c = 1 ;
}else{
b[i] = 0 ;
c = 0 ;
}
}
for(int i = 1;i < 32;i++){
b[i] ^= 1 ;
}
int ans = 0 ;
for(int i = 1;i <= 31;i++){
if(b[i] > 0){
ans += (1<<(31-i)) ;
}
}
return -ans ;
}
}
// write code here
}
}
模拟二进制编码
美的集团公司福利 798人发布