[LeetCode]201 区间按位与

来源:互联网 发布:广州美工培训班 编辑:程序博客网 时间:2024/05/16 10:11

Bitwise AND of Numbers Range(区间按位与)

【难度:Medium】
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

For example, given the range [5, 7], you should return 4.
给定一个区间[m,n],求该区间所有整数按位与运算的结果。


解题思路

普通算法在区间很大时会导致超时,因此要使用一些位操作。主要思路就是通过判断m和n不同的位数有多少,这些对应的位置按位与结果一定为0,那么当最后剩下m和n相同的位时,按位与就是m(或n),左移不同的位数即可。


c++代码如下:

class Solution {public:    int rangeBitwiseAnd(int m, int n) {        int tmp = 0;        while (m != n) {            //右移1位后判断            m >>= 1;            n >>= 1;            cout << m << " " << n << endl;            tmp++;        }        return n<<tmp;    }};
0 0
原创粉丝点击