原题链接在这里:
题目:
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.
题解:
举几个例子可以看出能位运算&出1 bit的位置都是高位,低位的所有可能数字走一遍都会是0.
所以找m和n高位相同的1 bit, 后面都是0 bit.
Time Complexity: O(1), 最多32位. Space: O(1).
AC Java:
1 public class Solution { 2 public int rangeBitwiseAnd(int m, int n) { 3 int count = 0; 4 while(m!=n){ 5 m >>= 1; 6 n >>= 1; 7 count++; 8 } 9 return m <<= count;10 }11 }