476. 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.
首先得到输入的整数的二进制有x位,再将输入的输与x位的1按位异或
C++(6ms):
1 class Solution { 2 public: 3 int findComplement(int num) { 4 int a = ~0 ; 5 while(num&a){ 6 a<<=1; 7 } 8 a=~a; 9 return num^a; 10 } 11 };
Integer.highestOneBit(int i)的作用
返回的则是跟它最靠近的比它小的2的N次方
也就是去掉低位的1,只保留最高位的1
java(11ms):
1 class Solution { 2 public int findComplement(int num) { 3 return ~num + (Integer.highestOneBit(num)<<1) ; 4 } 5 }