Day23-Bitwise AND of Numbers Range
问题描述:
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
就是给了俩数,这俩数代表数组的范围边界,而要我们找到这个数组中所有数字按位与的结果。
Note:
按位与就是数字的二进制表示运算,如果两个数的位上都为1,则该位结果为,否则其他任何情况都是0.
Example
Example 1:
Input: [5,7]
Output: 4
Example 2:
解释:
5:101
6:110
7:111
输出4:100
Input: [0,1]
Output: 0
解释:
0:0
1:1
输出0:0
我们可以看到上面的运算有一个特点是,输出的数在0前面的位数的数和数组范围的数的前面的数相等,也就是最后的输出结果只与数组中数的相同的位数有关,而我们也不需要遍历数组中所有的数,只需要找出m,n的相同的位数即可。由此有下面的解法。
解法一:
m,n两个数同时从右边按位遍历,直到两者相同为止,而我们返回的是当前为止右边添零就可以了,至于填多少个零要看上一步中比较了多少次。
class Solution:
def rangeBitwiseAnd(self, m: int, n: int) -> int:
i = 0
while m != n:
m>>=1
n>>=1
i += 1
return m << i