Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 2.31 KB

README.md

File metadata and controls

81 lines (62 loc) · 2.31 KB

The complement of an integer is the integer you get when you flip all the 0's to 1's and all the 1's to 0's in its binary representation.

  • For example, The integer 5 is "101" in binary and its complement is "010" which is the integer 2.

Given an integer n, return its complement.

 

Example 1:

Input: n = 5
Output: 2
Explanation: 5 is "101" in binary, with complement "010" in binary, which is 2 in base-10.

Example 2:

Input: n = 7
Output: 0
Explanation: 7 is "111" in binary, with complement "000" in binary, which is 0 in base-10.

Example 3:

Input: n = 10
Output: 5
Explanation: 10 is "1010" in binary, with complement "0101" in binary, which is 5 in base-10.

 

Constraints:

  • 0 <= n < 109

 

Note: This question is the same as 476: https://leetcode.com/problems/number-complement/

Companies:
Cloudera

Related Topics:
Bit Manipulation

Solution 1.

// OJ: https://leetcode.com/problems/complement-of-base-10-integer/
// Author: github.com/lzl124631x
// Time: O(1)
// Space: O(1)
class Solution {
public:
    int bitwiseComplement(int n) {
        if (n == 0) return 1;
        unsigned mask = ~0;
        while (mask & n) mask <<= 1;
        return ~mask & ~n;
    }
};

Solution 2.

// OJ: https://leetcode.com/problems/complement-of-base-10-integer/
// Author: github.com/lzl124631x
// Time: O(1)
// Space: O(1)
class Solution {
public:
    int bitwiseComplement(int n) {
        return n ? (unsigned)~0 >> __builtin_clz(n) ^ n : 1;
    }
};