题目地址: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.
把整数转为32位二进制数直接放在长度为32的数组中处理吧,高位为0的不要动,从高到低方向从第一个1开始处理,然后再转回十进制数返回即可:
public class NumberComplement {
public static int findComplement(int num) {
int[] arr = new int[32];
for (int i = 0; i < 32; i++) {
arr[i] = num % 2;
num /= 2;
}
int i = 31;
while (arr[i--] == 0);
for (int k = i + 1; k >= 0; k--) {
if (arr[k] == 0)
arr[k] = 1;
else
arr[k] = 0;
}
int r = 0;
for (int j = 0; j < 32; j++) {
if (arr[j] == 0)
continue;
else
r += arr[j] * (int)Math.pow(2, j);
}
return r;
}
public static void main(String[] args) {
System.out.println(findComplement(5));
}
}