给定范围 [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<<k
思路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);
}
}