leetcode (力扣) 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

思路分析

这道题是求left到right之间每一个数与操作的结果。

测试用例还挺良心的,给了个1-2147483647。告诉你暴力过不了哈哈。

这里可以回想一下二进制与操作,两个数的''与''只要有0则为0。

而一个数不断加1变成另一个数的过程中,实际上每一位都有变成0的情况。

这里举个例子秒懂,

  • 比如4->5 对应二进制 101->110
  • 9->10 对应二进制 111->1000
  • 100->101 对应二进制 1100100 ->1100101

所以其实就是找两个数的最长公共前缀。

这样思路就简单了,两个数的二进制不断往右移动,当两者相等的时候,停止移动。

记t为移动的次数,t就是两个数的二进制不同的位数。此时再左移t位就可以啦。

完整代码

python 复制代码
class Solution:
    def rangeBitwiseAnd(self, left: int, right: int) -> int:
        res = 0

        while left<right:
            left = left>>1
            right = right>>1
            res +=1
        return left<<res
        
        ```
相关推荐
小O的算法实验室13 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生15 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿15 小时前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz15 小时前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能15 小时前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****15 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能15 小时前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能15 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo15 小时前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ015 小时前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法