题目简介:
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
示例 1:
1 | 输入: [5,7] |
示例 2:
1 | 输入: [0,1] |
思路:
其实这道题的核心就是找到两个数字用二进制表示时的公共前缀,因为范围内的数字是连续的,所以除了公共前缀,其余后面的部分,每个部位必有0出现,所以根据与运算的规则,都为0。
所以问题转换为了找公共前缀,我们可以先将两个数字向右位移,直至两个数字相同,此时的数字(二进制)便为公共前缀,然后再根据位移的步数再左移回去(即在后面补0),便得到了最后的结果。
代码如下:
1 | class Solution { |