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.
Better solution:
public static int highestOneBit(int i)
Returns an
int
value with at most a single one-bit, in the position of the highest-order ("leftmost") one-bit in the specified int
value. 1 public class Solution { 2 public int findComplement(int num) { 3 return ~num & ((Integer.highestOneBit(num) << 1) - 1); 4 } 5 }
一般方法:
1 public class Solution { 2 public int findComplement(int num) { 3 int res = 0; 4 int i = 31; 5 while (i >= 0) { 6 if (((num >>> i) & 1) == 1) break; 7 i--; 8 } 9 while (i >= 0) { 10 if (((num >>> i) & 1) == 0) { 11 res |= 1<<i; 12 } 13 i--; 14 } 15 return res; 16 } 17 }