Welcome to Subscribe On Youtube

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;
    }
};
  • 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);
        }
    }
    
    ############
    
    class Solution {
        public int findComplement(int num) {
            int ans = 0;
            boolean find = false;
            for (int i = 30; i >= 0; --i) {
                int b = num & (1 << i);
                if (!find && b == 0) {
                    continue;
                }
                find = true;
                if (b == 0) {
                    ans |= (1 << i);
                }
            }
            return ans;
        }
    }
    
  • // 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
    
    
  • func findComplement(num int) int {
    	ans := 0
    	find := false
    	for i := 30; i >= 0; i-- {
    		b := num & (1 << i)
    		if !find && b == 0 {
    			continue
    		}
    		find = true
    		if b == 0 {
    			ans |= (1 << i)
    		}
    	}
    	return ans
    }
    

All Problems

All Solutions