Given a positive integer, output its complement number. The complement strategy is to flip the bits of its 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.

**Note:**

- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
- This question is the same as 1009: https://leetcode.com/problems/complement-of-base-10-integer/

#### Solution

Here we can use complement operator

**For Example: **

**Input:**5 Binary Representation of 5: 101 Complement of 5: 11111111111111111111111111111010 Given input number only having 3-bit representation[101], So we are only interested in the last 3 bits of the Complemented Number, to get the last 3 digits and mask the rest of the leftmost bits we can do AND with 00000000000000000000000000000111.

###### Code

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class NumberComplement { public int findComplement(int num) { int mask = (Integer.highestOneBit(num) << 1) - 1; //Set all ones to mask for result. num = ~num; // Complement the number return num & mask; // and mask number and inverted number. } public static void main(String[] args) { NumberComplement nmObj=new NumberComplement(); System.out.println(nmObj.findComplement(5)); } } |

#### Output

We encourage you to write a comment if you have a better solution or having any doubt on the above topic.