• 自己的方法不适用性太差了 因为要另外处理0;
    所以不建议采用
import java.util.Scanner;
class Solution {
      public int bitwiseComplement(int N) {
            String str = "";
            int sum = 0 ;
            if(N == 0) {
                return 1;
            }
            while( N >0 ) {
                if(N % 2 == 0) {
                    str = 1 + str;
                }
                else {
                    str = 0 + str ;
                }
                N /= 2;
            }
            for(int i = 0 ; i <str.length(); i++) {
                if(str.charAt(i) == '1') 
                    sum = (sum)*2 +1;
                else
                    sum = (sum)*2 +0;
            }
            return sum;
        }
}
  • 其他版本 emmmm 也是要另外处理 0 和 1 不过他方法确实挺好的 采用了位运算 get~
class Solution {
    public int bitwiseComplement(int N) {
        int i, M=N;
        for (i=1 ; i<=N ; i<<=1){
            M = M^i;
        }
        return N==0 ? 1 : M ;
    }
}
  • 第二种位运算 很ok 基本都是这种思路
public int bitwiseComplement(int N) {
        if (N == 0) return 1;
        int ones = 0, tmp = N;
        while (tmp != 0) {
            tmp = tmp >> 1;
            ones = ones << 1;
            ++ones;
        }
        return N ^ ones;
    }