题目链接:leetcode 201
1.题目
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。
2.示例
1)示例 1:
输入:left = 5, right = 7
输出:4
2)示例 2:
输入:left = 0, right = 0
输出:0
3)示例 3:
输入:left = 1, right = 2147483647
输出:0
4)提示:
0 <= left <= right <= 2^31 - 1
3.分析
问题可以转化为找left和right的公共前缀
4.代码
class Solution {
public:
int rangeBitwiseAnd(int left, int right) {
int res=1<<30,ans=0;
for(int i=30;i>=0;i--){
if((left&res)!=(right&res)) break;
ans|=(left&res);res>>=1;
}return ans;
}
};