LeetCode Number Complement
原题链接在这里: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.
题解:
找到num最左面的1 bit, 从这个位置到最后是要flip的部分. template是从最左位置到最后到时1 bit.
flip原来整体的num, 然后位运算 & template.
Time Complexity: O(1). Space: O(1).
AC Java:
1 public class Solution { 2 public int findComplement(int num) { 3 int template = (Integer.highestOneBit(num) << 1) - 1; 4 num = ~num; 5 return num & template; 6 } 7 }