【LeetCode每日一题】——201.数字范围按位与

一【题目类别】

  • 位运算

二【题目难度】

  • 中等

三【题目编号】

  • 201.数字范围按位与

四【题目描述】

  • 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。

五【题目示例】

  • 示例 1:

    • 输入:left = 5, right = 7
    • 输出:4
  • 示例 2:

    • 输入:left = 0, right = 0
    • 输出:0
  • 示例 3:

    • 输入:left = 1, right = 2147483647
    • 输出:0

六【题目提示】

  • 0 < = l e f t < = r i g h t < = 2 31 − 1 0 <= left <= right <= 2^{31} - 1 0<=left<=right<=2311

七【解题思路】

  • 暴力解法肯定会超时,所以我们换个思路
  • 分析题意后我们发现,传入的左边界和右边界是中的数字是连续的,也就是说,对这些数字进行按位与,得到的结果就是最后一个位置相等的1后面全是0,可以这么理解:进行按位与操作后,只要有0,与的结果就是0,只有全是1的时候,按位与的结果才是1,所以将这些连续数字的二进制对应,进行按位与操作,我们要求的就是共同的前缀,然后后面补0就是我们要的结果
  • 所以首先当左边界和右边界不相等的时候对其进行右移的操作,并记录右移的次数,当左边界和右边界相等时结束
  • 因为左边要补0,所以再将结果向左移动记录的次数
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( l o g n ) O(logn) O(logn) n n n为传入参数的右边界的大小
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    
    
    public int rangeBitwiseAnd(int left, int right) {
    
    
        int count = 0;
        while(left != right){
    
    
            left >>= 1;
            right >>= 1;
            count++;
        }
        return left << count;
    }
}
  1. C语言版
int rangeBitwiseAnd(int left, int right)
{
    
    
    int count = 0;
    while(left != right)
    {
    
    
        left >>= 1;
        right >>= 1;
        count++;
    }
    return left << count;
}
  1. Python语言版
class Solution:
    def rangeBitwiseAnd(self, left: int, right: int) -> int:
        count = 0
        while left != right:
            left >>= 1
            right >>= 1
            count += 1
        return left << count
  1. C++语言版
class Solution {
    
    
public:
    int rangeBitwiseAnd(int left, int right) {
    
    
        int count = 0;
        while(left != right)
        {
    
    
            left >>= 1;
            right >>= 1;
            count++;
        }
        return left << count;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/IronmanJay/article/details/129762553
今日推荐