##### 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

// OJ: https://leetcode.com/problems/number-complement/
// Time: O(1)
// Space: O(1)
class Solution {
public:
int findComplement(int 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) {
}
};

• 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
}