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
Ideas of solving a problem
Considering the range [m, n], if n is higher than m binary digits, in the process of accumulating bitwise sum, every binary digit of the digit must have appeared 0, so once the case of different digits occurs, the result must be 0. In the program, when m and n are shifted to the right, if m and n are equal to each other, it means that the left side of the cumulative bitwise sum must be equal to m and n. At this point, we can move back to the left. The time complexity is O(n) and the space complexity is O(1). It consumes 6.1Mb of memory.
Code
package main
import (
"fmt"
)
func main(){
m := 5
n := 7
fmt.Println(rangeBitwiseAnd(m,n))
}
func rangeBitwiseAnd(m int, n int) int {
t := 0
for ; m != n; t++ {
m >>= 1
n >>= 1
}
return n << t
}
链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/solution/yi-wei-suan-fa-by-tuotuoli/
来源:力扣(LeetCode)