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
原创粉丝点击