Leetcode Bitwise AND of Numbers Range

来源:互联网 发布:短信软件哪个好 编辑:程序博客网 时间:2024/04/30 13:23

题意:求区间内所有数字按位与的结果。

思路:对于区间中的数字,没有进位的情况下是不会出现0的,所以应当考虑需要进位的位数。高位的数字是保持的,只要考虑低位有多少进位。因此用区间的跨度计算进位的个数。

class Solution {public:    int rangeBitwiseAnd(int m, int n) {        int re = m & n;        int p = 0xffffffff;        int diff = n - m;        while(diff) {            p <<= 1;            diff /= 2;        }                return p & re;    }};


另一种思路不断去掉末尾的1,直到小于等于原来的值。

class Solution {public:    int rangeBitwiseAnd(int m, int n) {        while(m < n) n &= n - 1;                return n;    }};


0 0
原创粉丝点击