[LeetCode] Number Complement 补数
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
题目描述:不考虑二进制表示中的首 0 部分。
对于 00000101,要求补码可以将它与 00000111 进行异或操作。那么问题就转换为求掩码 00000111。
class Solution {
public int findComplement(int num) {
if(num == 0)
return 1;
int mask = 1<<30;//不考虑首部 那么只取31位
while((num & mask) == 0)
mask >>= 1;
mask = (mask << 1) - 1;//说明多移了一位再移动回去,首部和0异或其他位置和1异或就是反码
//由上述例子观察即可
return num ^ mask;
}
}
题目只针对正数:
class Solution {
public int findComplement(int num) {
int count = 0;
int val = num;
while(val > 0){
val = val >> 1;
count = (count << 1) + 1;
}
return num ^ count;
}
}