本文主要是介绍leetcode 201. Bitwise AND of Numbers Range | 201. 数字范围按位与(Java),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
https://leetcode.com/problems/bitwise-and-of-numbers-range/
题解
(这题暴力法超时了,最后还是参考了答案的思路)
最直观的解决方案就是:迭代范围内的每个数字,依次执行按位与运算,得到结果,但此方法在 [m,n] 范围较大的测试用例中超时。
正解如下:
class Solution {public int rangeBitwiseAnd(int left, int right) {int shift = 0; // 同时右移 shift 位后,两数第一次相等while (left >> shift != right >> shift) {if (left >> shift == 0 && right >> shift != 0) return 0; // 如果最高位不能对齐的话,则必无公共前缀shift++;}return left >> shift << shift; // 见图1,目标是将虚线后面的位置0}
}
图1:
方法二:Brian Kernighan 算法
这篇关于leetcode 201. Bitwise AND of Numbers Range | 201. 数字范围按位与(Java)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!