Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
Example 1:
Input: [5,7]
Output: 4
Example 2:
Input: [0,1]
Output: 0
Solution:
// 5 101
// 6 110
// 7 111
// 100
// 2 10
// 3 11
// 10
// f(m,n) = &[m, n] = &[m/2, n/2] * 2
func rangeBitwiseAnd(m int, n int) int {
if m == n {
return m
}
if m - n == 1 {
return m & n
}
return rangeBitwiseAnd(m/2, n/2) << 1
}