leetcode201

1 class Solution:
2     def rangeBitwiseAnd(self, m: int, n: int) -> int:
3         while n > m:
4             n &= (n-1)
5         return n

算法思路:位运算。

“按位与”操作有一个特点,就是 n & (n-1),是将n的最低的一位二进制1变成0。

例如:

10:1010

9:1001

10 & 9 = 1000 -> 8

注意这是最低位的1变成0,而不是 n - 2。

例如:

100 &  99 = 96 而不是98。但是与的结果必定是小于 n的。

根据按位与的这个特点,可以知道在闭区间[m,n]上,本题实际上是计算:

n将最低位的1变成0,如果还大于m,则继续将最低位变成0,一直到比m小,则为所求答案。

猜你喜欢

转载自www.cnblogs.com/asenyang/p/12602831.html