100372. 使两个整数相等的位更改次数

9 阅读1分钟

100372. 使两个整数相等的位更改次数

简单

给你两个正整数 n 和 k

你可以选择 n 的 二进制表示 中任意一个值为 1 的位,并将其改为 0。

返回使得 n 等于 k 所需要的更改次数。如果无法实现,返回 -1。

 

示例 1:

输入:  n = 13, k = 4

输出:  2

解释:
最初,n 和 k 的二进制表示分别为 n = (1101)2 和 k = (0100)2

我们可以改变 n 的第一位和第四位。结果整数为 n = (0100)2 = k

示例 2:

输入:  n = 21, k = 21

输出:  0

解释:
n 和 k 已经相等,因此不需要更改。

示例 3:

输入:  n = 14, k = 13

输出:  -1

解释:
无法使 n 等于 k

 

提示:

  • 1 <= n, k <= 106
    public int minChanges(int n, int k) {
        int count=0;
        while(n!=0){
            if(n%2==0){
                if(k%2==0){
                }
                else if(k%2==1){
                    return -1;
                }
                n=n/2;
                k=k/2;
            }
            else if(n%2==1){
                if(k%2==0){
                    count++;
                }
                else if(k%2==1){
                }
                n=n/2;
                k=k/2;
            }
        }
        if(k!=0){
            return -1;
        }
        return count;
    }
}