Software Engineering

# Find the Complement of Base 10 Integer in Java

## The challenge#

Every non-negative integer `N` has a binary representation.  For example, `5` can be represented as `"101"` in binary, `11` as `"1011"` in binary, and so on.  Note that except for `N = 0`, there are no leading zeroes in any binary representation.

The complement of a binary representation is the number in binary you get when changing every `1` to a `&nbsp;and&nbsp;` to a `1`.  For example, the complement of `"101"` in binary is `"010"` in binary.

For a given number `N` in base-10, return the complement of it’s binary representation as a base-10 integer.

Example 1:

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

Example 2:

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

Example 3:

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

Note:

1. `0 <= N < 10^9`

## The solution in Java code#

To solve this, we need to know how to convert an int to binary and back again.

In order to convert an int to binary, we can use the `Integer.toBinaryString()` helper.

When we want to convert a binary string back to an int, we can use the `Integer.parseInt(str, 2)` helper.

In the below code solution, we solve the problem by:

1. Converting the int to binary
2. Creating a new int array of the same length, but with all zeroed values
3. Look from right to left and swap the values
4. Create a new string and loop through the array appending them
5. Convert the resulting string binary back to an int
``````class Solution {
public int bitwiseComplement(int N) {
// convert int to binary
String bin = Integer.toBinaryString(N);

// create a new int array of variable length
int[] out = new int[bin.length()];
// fill the new array with zeroed values
Arrays.fill(out, 0);

// move through the array from right to left
for (int i=bin.length()-1; i>=0; i--) {
// if it's a 1, then swap to a 0, and vice versa
if (bin.charAt(i)=='1') out[i] = 0;
else out[i] = 1;
}

// create a new string
StringBuilder strNum = new StringBuilder();
// loop through the array and append to the string
for (int num : out) strNum.append(num);

// convert binary back to int
int finalInt = Integer.parseInt(strNum.toString(), 2);