1009. Complement of Base 10 Integer

Problem


Tags: Bit Manipulation

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 < 10^9

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

Code

C

// 1009. Complement of Base 10 Integer (8/9/53958)
// Runtime: 0 ms (95.00%) Memory: 5.70 MB (16.25%) 

int bitwiseComplement(int n) {
    // 如果 n 為 0,直接回傳 1
    if(n == 0) return 1;
    
    int flipped = n;
    
    // 從最尾端開始遍歷,每次翻一個,其餘維持原狀
    for(int64_t i = 1; i <= n; i <<= 1) {
        flipped = flipped ^ i;
    }
    
    return flipped;
}