![[LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法,第1张 [LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法,第1张](/aiimages/%5BLeetCode%5D201.+%E6%95%B0%E5%AD%97%E8%8C%83%E5%9B%B4%E6%8C%89%E4%BD%8D%E4%B8%8E%EF%BC%88java%E5%AE%9E%E7%8E%B0%EF%BC%89%E6%8C%89%E4%BD%8D%E4%B8%8E%E3%80%81%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8F%96%E7%AC%ACk%E4%BD%8D%E7%9A%84%E6%96%B9%E6%B3%95.png)
- 1. 题目
- 2. 读题(需要重点注意的东西)
- 3. 解法
- 4. 可能有帮助的前置习题
- 5. 所用到的数据结构与算法思想
- 6. 总结
读题:
若left = 4,right = 7,返回按位与的结果为:4 & 5 & 6 & 7
思路(位的与运算 &):
位的与运算 &:都是1则为1,否则为0;
取n的第k位的方法:n >> k & 1
设i为n和m的二进制表示中从最高位开始枚举第一个不同的数
因为,因此给出的数的最大值的位数为30位,我们从后往前取出这30-i位数即是答案。
---------------------------------------------------解法---------------------------------------------------
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)