[LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法

[LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法,第1张

[LeetCode]201. 数字范围按位与(java实现)按位与、二进制取第k位的方法
  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

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

6. 总结

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/790067.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存