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 的子集。