Skip to content

3226. Number of Bit Changes to Make Two Integers Equal

You are given two positive integers n and k.

You can choose any bit in the binary representation of n that is equal to 1 and change it to 0.

Return the number of changes needed to make n equal to k. If it is impossible, return -1.

Example 1:

Input: n = 13, k = 4

Output: 2

Explanation: Initially, the binary representations of n and k are n = (1101)2 and k = (0100)2. We can change the first and fourth bits of n. The resulting integer is n = (**0**10**0**)2 = k.

Example 2:

Input: n = 21, k = 21

Output: 0

Explanation: n and k are already equal, so no changes are needed.

Example 3:

Input: n = 14, k = 13

Output: -1

Explanation: It is not possible to make n equal to k.

Constraints:

  • 1 <= n, k <= 106

Solution:

class Solution {
    public int minChanges(int n, int k) {
        int result = 0;

        String s = Integer.toBinaryString(n);
        String s2 = Integer.toBinaryString(k);

        int s2len = s2.length();
        int slen = s.length();

        if (s2len > slen){
            return -1;
        }
        int count = Math.min(s2.length(), s.length());
        while(count > 0){
            if (s.charAt(slen -1) != (s2.charAt(s2len-1))){
                if (s.charAt(slen-1) == '1'){
                    result++;
                }else{
                    return -1;
                }
            }

            s2len--;
            slen--;
            count--;
        }

        if (s.length() > s2.length()){
            for (int i = 0; i < s.length() - s2.length(); i++){
                if (s.charAt(i) == '1'){
                    result++;
                }


            }
        }


        return result;


    }
}

//TC: O(n)
//SC: O(1)
class Solution {
    public int minChanges(int n, int k) {
        k ^= n;
        int cnt = Integer.bitCount(k);
        k &= n;
        return cnt == Integer.bitCount(k) ? cnt : -1;
    }
}