class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
unsigned int mask = 0x80000000;
int ret = 0;
while(mask != 0){
int bit1 = n & mask;
int bit2 = m & mask;
if(bit1 == bit2){
if(bit1 != 0)
ret |= mask;
}
else{
break;
}
mask >>= 1;
}
return ret;
}
};
这道题显然不是暴力来做
思考:
题目中求and, and的特点是,对返回结果中的每一位,从m到n这n-m+1个数中,只要有一个是0,那么结果中的对应位是0
所以思路是:
从高位到低位:
逐位比较m和n在同一个位置上的bit, 如果相等,那么结果中对应位置的bit也相同;否则,一定是n中这个bit为1,m中这个bit为0,那么从这一位往后的数字都是0
本文介绍了一种高效解决区间按位与问题的方法。通过对比区间内两个边界值的二进制位,确定结果中每一位的值。此算法避免了暴力计算,显著提升了效率。
1400

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



