Formatted question description: https://leetcode.ca/all/476.html

476. Number Complement (Easy)

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

  1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
  2. 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.

Companies:
Cloudera

Related Topics:
Bit Manipulation

Solution 1.

For example:

num          = 00000101
mask         = 11111000
~mask & ~num = 00000010
// OJ: https://leetcode.com/problems/number-complement/
// Time: O(1)
// Space: O(1)
class Solution {
public:
    int findComplement(int num) {
        unsigned mask = ~0;
        while (num & mask) mask <<= 1;
        return ~mask & ~num;
    }
};

Java

  • class Solution {
        public int findComplement(int num) {
            int power = (int) (Math.log(num) / Math.log(2));
            long max = (long) Math.pow(2, power + 1) - 1;
            return (int) (max - num);
        }
    }
    
  • // OJ: https://leetcode.com/problems/number-complement/
    // Time: O(1)
    // Space: O(1)
    class Solution {
    public:
        int findComplement(int num) {
            unsigned mask = ~0;
            while (num & mask) mask <<= 1;
            return ~mask & ~num;
        }
    };
    
  • class Solution(object):
      def findComplement(self, num):
        i = 1
        while i <= num:
          i = i << 1
        return (i - 1) ^ num
    
    

All Problems

All Solutions