原题地址:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/
题目描述:
解题方案:
首先m和n的最长公共前缀按位与是不会发生变化的,会改变的是公共前缀后面的位。而在m和n之间总会有后面位为1000…的一个数,由于这个数的存在,以及后面位为非公共前缀中的位,所以第一位会有1有0,所以后面的位按位作与后都会变为0,即最终结果为前几位为公共前缀,后几位均为0的数。
代码:
class Solution {
public int rangeBitwiseAnd(int m, int n) {
int step = 0;
while(m != n) {
m = m >>> 1;
n = n >>> 1;
step ++;
}
for(int i = 0; i < step; i ++)
m= m << 1;
return m;
}
}
class Solution {
public int rangeBitwiseAnd(int m, int n) {
while(m < n) {
n = n & (n - 1);
}
return n;
}
}
PS:第二种方法如果条件为m != n,则会超时。