原题网址:https://leetcode.com/problems/bitwise-and-of-numbers-range/
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7], you should return 4.
思路:总体思路就是求出m和n的高位比特的公共前缀。
方法一:变动前缀本身。
public class Solution {
public int rangeBitwiseAnd(int m, int n) {
int prefix = 0;
int hi = 1 << 30;
for(int i=0; i<31; i++) {
int next = hi | (prefix >> 1);
int pm = m & next;
int pn = n & next;
if (pm != pn) return prefix & m;
prefix = next;
}
return prefix & m;
}
}
方法二:变动m和n本身。
public class Solution {
public int rangeBitwiseAnd(int m, int n) {
int move = 0;
while (m != n) {
m >>= 1;
n >>= 1;
move ++;
}
return m << move;
}
}
方法三:删除n的低位部分。
public class Solution {
public int rangeBitwiseAnd(int m, int n) {
while (m<n) n = n & (n-1);
return n;
}
}

本文提供了解决LeetCode上区间位与问题的三种不同方法。这些方法包括变动前缀本身、变动m和n本身以及删除n的低位部分。通过这些方法可以有效地找出给定范围内所有数字的按位与结果。
&spm=1001.2101.3001.5002&articleId=51311742&d=1&t=3&u=e291468a9692481b84ead9f13bb9cf72)
552

被折叠的 条评论
为什么被折叠?



