0%

leetCode-201:Bitwise AND of Numbers Range

问题描述

给定两个整数,第一个数小于第二个数,要求求出这两个数(包含)之间的所有数的二进制数 “与” 运算后的结果。题目链接:**点我**

样例输入输出

输入:[5, 7]

输出:4

说明:5 的二进制数是 101,6 的二进制数是110,7 的二进制数是 111,三个二进制数求与运算后是 100,对应 10 进制数 4

输入:[0, 1]

输出:0

说明:0 的二进制数是 0,1 的二进制数是 1,两者求与运算后是 0,对应 10 进制数 0

问题解法

此题参考 https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/solution/shu-zi-fan-wei-an-wei-yu-by-leetcode-solution/。从两个数围起来的范围数进行分析,对这些数进行求与运算,实际上是求边界数的二进制数的公共前缀。因此只需要将边界值的数向右移位直到两者相等,再向左移动对应的位数即可得到答案。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution
{
public int rangeBitwiseAnd(int m, int n)
{
int count = 0;
while (m < n)
{
m = m >> 1;
n = n >> 1;
count++;
}

return m << count;
}
}

参考资料

https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/solution/shu-zi-fan-wei-an-wei-yu-by-leetcode-solution/