LeetCode 3226.使两个整数相等的位更改次数
题目:
给你两个正整数 n
和 k
。
你可以选择 n
的 二进制表示 中任意一个值为 1 的位,并将其改为 0。
返回使得 n
等于 k
所需要的更改次数。如果无法实现,返回 -1。
思路:
从集合的角度理解,每次操作相当于去掉集合 n 中的一个元素。
要能把 n 变成 k,k 必须是 n 的子集。如果不是,返回 −1。
如果 k 是 n 的子集,答案为从 n 中去掉 k 后的集合大小,即 n⊕k 的二进制中的 1 的个数。
代码:
class Solution {public int minChanges(int n, int k) {return (n & k) != k ? -1 : Integer.bitCount(n ^ k);}
}
性能:
时间复杂度:O(1)
空间复杂度:O(1)