对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
class Solution {
public int findComplement(int num) {
// 计算 num 的补数
int mask = 1;
while (mask < num) {
mask = (mask << 1) | 1; // 将 mask 移动到 num 相同的位数,并用 1 填充
}
return ~num & mask; // 反转 num 的所有位,并与 mask 按位与
}
}
时间复杂度:O(logn),空间复杂度:O(1)。
这道题和求十进制数的反码一样。