题目:
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的公共左首部加后面补零。
C++版:
class Solution { public: int rangeBitwiseAnd(int m, int n) { int p = 0; while(m != n) { m >>= 1; n >>= 1; p++; } return m << p; } };
public class Solution { public int rangeBitwiseAnd(int m, int n) { int p = 0; while(m != n) { m >>= 1; n >>= 1; p++; } return m << p; } }
class Solution: # @param {integer} m # @param {integer} n # @return {integer} def rangeBitwiseAnd(self, m, n): p = 0 while m != n: m >>= 1 n >>= 1 p += 1 return m << p