leetcode Bitwise AND of Numbers Range
来源:互联网 发布:数据三国 编辑:程序博客网 时间:2024/06/05 17:37
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
0 0