476. Number Complement #
题目 #
对整数的二进制表示取反 (0 变 1,1 变 0) 后,再转换为十进制表示,可以得到这个整数的补数。
如整数 5 的二进制表示是 "101",取反后得到 "010",再转回十进制表示得到补数 2。
给定一个整数,输出其补数。
注: 1 <= num < 2^31
思路 #
代码 #
class Solution {
public int findComplement(int num) {
if (num == 0) return 1;
boolean flag = false;
for (int i = 30; i >= 0; i--) {
if (((num >> i) & 1) == 1) flag = true;
if (flag == true) {
num ^= 1 << i;
}
}
return num;
}
}