首先解釋下代碼中maxNum是什么意思
當(dāng)N=101, maxNum=111;
當(dāng)N=10001,maxNum=11111徘钥;
當(dāng)N=10颂鸿,maxNum=11;
maxNum就是當(dāng)前位數(shù)下二進(jìn)制的最大值礁哄。
maxNum的算法和Java源碼HashMap.tableSizeFor(int cap)方法中計(jì)算方法一致胀葱。
算出maxNum之后就簡(jiǎn)單了碱妆,只需要給N求反辛馆,然后和maxNum求與就可以了吱抚。
class Solution {
public int bitwiseComplement(int N) {
if (N == 0) {
return 1;
}
int maxNum = N - 1;
maxNum |= maxNum >>> 1;
maxNum |= maxNum >>> 2;
maxNum |= maxNum >>> 4;
maxNum |= maxNum >>> 8;
maxNum |= maxNum >>> 16;
return maxNum & ~N;
}
}