Leetcode面试经典150题-201.数字范围按位与
给你两个整数 left
和 right
,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left
、right
端点)。
示例 1:
输入:left = 5, right = 7 输出:4
示例 2:
输入:left = 0, right = 0 输出:0
示例 3:
输入:left = 1, right = 2147483647 输出:0
提示:
0 <= left <= right <= 231 - 1
这数字范围,挨个与必死无疑啊,
其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答
class Solution {
public int rangeBitwiseAnd(int left, int right) {
/**按照题目给的数据量,如果挨个按位与理论上是过不去的,试试 */
/**理论上,left和right是连续的,也就是left可能有1的第一位往后,所有位肯定都有0和1,也就是他们都是0
所有理论上如果right > left *2,肯定是0 */
//if(right >= left * 2) {
//return 0;
// }
if(left == right) {
return left;
}
int countBit = 0;
int result = left;
while(left < right) {
left = left >> 1;
right = right >> 1;
//System.out.println("left="+left+",right="+right);
countBit ++;
result = left & right;
}
//System.out.println(countBit);
return result << countBit;
}
}