[LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法
1. 题目
2. 读题(需要重点注意的东西)
读题:
若left = 4,right = 7,返回按位与的结果为:4 & 5 & 6 & 7
思路(位的与运算 &):
位的与运算 &:都是1则为1,否则为0;
取n的第k位的方法:n >> k & 1
设i为n和m的二进制表示中从最高位开始枚举第一个不同的数
因为,因此给出的数的最大值的位数为30位
,我们从后往前取出这30-i
位数即是答案。
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int res = 0;
for(int i = 30;i >= 0;i--){
if((left >> i & 1) != (right >> i & 1)) break;
if((left >> i & 1) == 1) res += 1 << i ;
}
return res;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
-
位的与运算 &:都是1则为1,否则为0;
-
取n的第k位的方法:
n >> k & 1