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