题解 | #牛群的编码反转#
牛群的编码反转
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 } }
模拟二进制编码