原题目:Leetcode 476
补数是对该数的二进制表示取反。

首先了解位运算 “异或”
当两个数 位
相同时,为0,
不相同时,为1.
以5为例,二进制为:101
为了将1 变成0 , 0 变成1,可以与111进行异或操作。
结果是010,即:2

int findComplement(int num){
    int temp = num;
    int k = 0;
    while (temp > 0)
    {
        temp >>=1;
        k = (k << 1) + 1;
    }
    return k ^ num;
}

循环计算num有多少个bit
同时,将k的位都置1.
最后进行异或操作,得到的就是补数了。


fat_tiger
7 声望0 粉丝