当前位置: 首页 > news >正文

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位就可以啦。

完整代码

class Solution:def rangeBitwiseAnd(self, left: int, right: int) -> int:res = 0while left<right:left = left>>1right = right>>1res +=1return left<<res```
http://www.lryc.cn/news/235084.html

相关文章:

  • Flutter笔记: 在Flutter应用中使用SQLite数据库
  • OpenAI GPT5计划泄露
  • 【面试经典150 | 数学】Pow(x, n)
  • 封装比较好的登录页面
  • 如何使用Flask request对象处理请求
  • 快速搜索多个word、excel等文件中内容
  • Minio安装
  • Spring初识
  • 2023全新付费进群系统源码 带定位完整版 附教程
  • C# LINQ使用介绍
  • 【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑
  • 开源与闭源:大模型时代的技术交融与商业平衡
  • C#开发的OpenRA游戏之属性BodyOrientation(6)
  • Linux shell编程学习笔记27:tputs
  • 【计算机网络笔记】IPv6简介
  • c语言-数据结构-堆
  • ROS基础—关于参数服务器的操作
  • Sql Server 2017主从配置之:事务日志传送
  • 每日OJ题_算法_双指针_力扣283. 移动零+力扣1089. 复写零
  • WebGl-Blender:建模 / 想象成形 / Blender概念词汇表 / 快捷键
  • 【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能
  • WPF实现右键菜单
  • Java智慧工地SaaS管理平台源码:AI/云计算/物联网
  • 【漏洞复现】通达oa 前台sql注入
  • 机器学习笔记 - Ocr识别中的文本检测EAST网络概述
  • 【SQL server】数据库、数据表的创建
  • vue的生命周期分别是什么?
  • Java拼图游戏
  • Vue框架的element组件table文字居中
  • 科技创新 共铸典范 | 江西卫健办邓敏、飞图影像董事长洪诗诗一行到访拓世科技集团,提振公共卫生事业发展