# 原题链接

https://leetcode.com/problems/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.

# 解法

public int findComplement(int num) {
int valid = 0;  // 最高位为1的位数
int tmp = num;
while(tmp > 0) {
tmp /= 2;
valid++;
}

return ~num & ((1 << valid) - 1);
}

public int findComplement(int num) {
return ~num & ((Integer.highestOneBit(num) << 1) - 1);
}

# 测试用例：

public static void main(String[] args) {
Solution s = new Solution();
assert(s.findComplement(5) == 2);
assert(s.findComplement(1) == 0);
assert(s.findComplement(0) == 0);
}