自己的方法不适用性太差了 因为要另外处理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;
}
原文地址:https://www.cnblogs.com/cznczai/p/11150420.html
时间: 2024-10-08 16:02:13