🗒️3226. 使两个整数相等的位更改次数
2025-1-16
| 2025-1-16
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 16, 2025 02:32 AM
给你两个正整数 n 和 k
你可以选择 n 的 二进制表示 中任意一个值为 1 的位,并将其改为 0。
返回使得 n 等于 k 所需要的更改次数。如果无法实现,返回 -1。

位运算基础

异或运算

思路:先利用异或找到不同的位置,然后统计可以 1 变 0 的位置。

从集合的角度出发

题目说明了 n 只能从 1 改为 0,每次操作相当于去掉集合 n 中的一个元素。要能把 n 变成 k,k 必须是 n 的子集。如果不是,返回 −1。

交集

如果 n 和 k 的交集是 k,那么 k 就是 n 的子集。

并集

如果 n 和 k 的并集是 n,那么 k 就是 n 的子集。

写法三

如果 k 去掉 n 中所有元素后,变成了空集,那么 k 就是 n 的子集。

📎 参考

  • 【题单】位运算
  • 1356. 根据数字二进制下 1 的数目排序位运算
    Loading...