[leetCode 丶每日随机] 3226. 使两个整数相等的位更改次数

原题: 3226.使两个整数相等的位更改次数


描述:

给你两个正整数 nk

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

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

示例 1

输入: n = 13, k = 4

输出: 2

解释:
最初,nk 的二进制表示分别为 n = (1101)<sub>2</sub>k = (0100)<sub>2</sub>

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

示例 2:

输入: n = 21, k = 21

输出: 0

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

示例 3:

输入: n = 14, k = 13

输出: -1

解释:
无法使 n 等于 k

提示

  • 1 <= n, k <= 10^6

个人版答案

执行用时: 0 ms 执行内存消耗: 39.78 M

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

0 ms 答案及进阶版**

嘻嘻, 我终于 0 ms 一次

个人解题思路与优秀答案解析

题目分析

  1. ...这没啥分析的... 位运算

个人版思路
哈哈哈哈哈哈, 多年前面试保安的时候, 准备过位运算.

进阶版思路
我的就是进阶版~ 哈哈哈哈