3064. 使用按位查询猜测数字 I 🔒
题目描述
你需要找到一个数字 n。
这里有一个预定义的 API int commonSetBits(int num),它返回 n 和 num 在二进制表示的同一位置上都是 1 的位数。换句话说,它返回 n & num 的 设置位 数量,其中 & 是按位 AND 运算符。
返回数字 n。
示例 1:
输入:n = 31 输出:31 解释:能够证明使用给定的 API 找到 31 是可能的。
示例 2:
输入:n = 33 输出:33 解释:能够证明使用给定的 API 找到 33 是可能的。
提示:
1 <= n <= 230 - 10 <= num <= 230 - 1- 如果你查询的
num超出了给定的范围,输出就不可靠。
解法
方法一:枚举
我们可以枚举 $2$ 的幂次方,然后调用 commonSetBits 方法,如果返回值大于 $0$,则说明 $n$ 的二进制表示中的对应位是 $1$。
时间复杂度 $O(\log n)$,本题中 $n \le 2^{30}$。空间复杂度 $O(1)$。
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |