201. 数字范围按位与

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。

示例 1:

输入: [5,7]
输出: 4
示例 2:

输入: [0,1]
输出: 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

求[m,n]范围内所有数字的按位与 也就是 求m和n的公共前缀,后面的位都是0

思路1:m和n右移,直到m和n相等,设右移步数为k,则答案为n< 思路2:n减去最低位的1,直到n<=m,答案为n

class Solution {
     
    public int rangeBitwiseAnd(int m, int n) {
     
        while(n > m){
     
            n -= lowbit(n);
        }
        return n;
    }
    public int lowbit(int x){
     
        return x&(-x);
    }
}

你可能感兴趣的:(LeetCode)