LeetCode in Kotlin

3226. Number of Bit Changes to Make Two Integers Equal

Easy

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:

Solution

class Solution {
    fun minChanges(n: Int, k: Int): Int {
        var n = n
        var k = k
        if ((n or k) != n) {
            return -1
        }
        var cnt = 0
        while (n > 0 || k > 0) {
            val bitN = n and 1
            val bitK = k and 1
            if (bitN == 1 && bitK == 0) {
                cnt++
            }
            n = n shr 1
            k = k shr 1
        }
        return cnt
    }
}