LeetCode 693. 交替位二进制数(详细解析 + 多解法实现)

news2026/4/11 16:28:16
LeetCode 693. 交替位二进制数详细解析 多解法实现前言LeetCode 693. 交替位二进制数是一道简单难度的位运算题目核心考察对二进制表示、位运算操作的理解与运用。本题看似简单但存在多种解题思路从直观的字符串判断到高效的位运算优化能充分体现“简单题多思路、多优化”的刷题思维。本文将从题目解析、思路推导、多解法代码实现严格遵循指定类结构、复杂度对比、常见坑点等方面全面拆解这道题适配CSDN技术博客实战风格附完整可运行代码和测试案例帮你吃透解题逻辑举一反三。适用人群算法入门者、位运算初学者、LeetCode刷题爱好者适合巩固二进制表示和位运算基础培养多思路解题能力。核心目录题目核心解析题干拆解 示例分析解题思路推导3种思路从直观到高效代码实现Python严格遵循指定类结构多解法对比复杂度分析时间 空间清晰对比常见坑点与避坑技巧拓展思考位运算同类题目延伸一、题目核心解析1.1 题干拆解题目给定一个正整数 n要求判断其二进制表示是否满足以下条件相邻两位的数字永不相同即呈现“0、1交替”的形式如101、1010而非111、1011。关键补充正整数的二进制表示不含前导0首位一定是1如5的二进制是101而非0101判断核心是“相邻两位不同”只需遍历二进制的每一位对比相邻两位即可题干提示 n 的范围是 1 ≤ n ≤ 2³¹ - 1无需考虑0和负数的情况避免边界处理冗余。1.2 示例深度分析示例1输入 n 5输出 true5 的二进制表示为101相邻两位分别是1和0不同、0和1不同满足交替条件返回true。示例2输入 n 7输出 false7 的二进制表示为111相邻两位分别是1和1相同、1和1相同不满足交替条件返回false。示例3输入 n 11输出 false11 的二进制表示为1011相邻两位分别是1和0不同、0和1不同、1和1相同存在相同相邻位返回false。1.3 题干隐含规律通过示例可提炼两个核心规律为后续优化思路提供支撑若二进制数交替则“当前位”与“下一位”一定不同可通过“逐位对比”或“位运算”快速判断交替位二进制数的一个重要特性将其右移1位后与原数进行异或XOR结果的二进制表示一定全为1如5→101右移1位→010异或结果→111若存在相邻相同位异或结果会出现0如7→111右移1位→011异或结果→100。二、解题思路推导3种思路从直观到高效本题有3种主流解题思路难度由浅入深从直观的字符串操作到高效的位运算优化适合不同基础的学习者下面逐一推导思路逻辑。2.1 思路1二进制字符串逐位对比最直观易理解核心逻辑将正整数 n 转换为二进制字符串遍历字符串的每一位对比当前位与下一位是否相同若存在任意一组相同返回false全部不同则返回true。具体步骤将 n 转换为二进制字符串Python中用 bin() 函数返回格式为 ‘0bxxxx’需截取[2:]去掉前缀遍历字符串从索引0到len(s)-2避免越界对比 s[i] 和 s[i1]若相等直接返回false遍历结束后若未发现相同相邻位返回true。优势与不足优势思路直观代码简洁无需掌握复杂位运算适合入门者不足需要转换为字符串存在一定的类型转换开销空间复杂度略高。2.2 思路2位运算逐位对比无字符串转换更高效核心逻辑不转换为字符串直接通过位运算获取二进制的每一位对比当前位与上一位是否相同。核心是用“与运算”获取当前位用“右移”依次获取每一位。具体步骤用变量 prev 记录上一位的二进制值初始为 n 的最低位即 n 1将 n 右移1位n n 1去掉最低位循环执行用 current n 1 获取当前最低位对比 current 与 prev若 current prev返回false否则更新 prev 为 current继续右移 n直到 n 变为0所有位都对比完毕返回true。优势与不足优势无字符串转换减少开销时间和空间复杂度更优不足需要掌握基础位运算、适合有一定位运算基础的学习者。2.3 思路3位运算优化一行代码最高效核心逻辑利用前文提炼的规律若 n 是交替位二进制数那么 n 与 n1 的异或结果x二进制表示全为1而全为1的二进制数 x满足 x (x1) 0如111 1000 0。反之若不满足该条件则 n 不是交替位二进制数。具体步骤极简计算 x n ^ (n 1)异或相同为0不同为1判断 x (x 1) 是否等于0等于则返回true否则返回false。逻辑验证结合示例1n 5二进制101n1 2二进制010x 101 ^ 010 111二进制x1 1000二进制111 1000 0 → 返回true。n 7二进制111n1 3二进制011x 111 ^ 011 100二进制x1 101100 101 100 ≠ 0 → 返回false。优势与不足优势代码极简一行核心逻辑时间复杂度O(1)位运算操作仅需固定几步与n的位数无关空间复杂度O(1)是最优解法不足思路较抽象需要理解异或的特性和全1二进制数的规律适合位运算进阶学习者。三、代码实现Python严格遵循指定类结构严格按照题干要求的类和方法格式实现上述3种思路附详细注释可直接复制到LeetCode提交均能通过所有测试用例。3.1 解法1二进制字符串逐位对比直观版核心转换为二进制字符串遍历对比相邻位易理解适合入门。classSolution:defhasAlternatingBits(self,n:int)-bool:# 将n转换为二进制字符串去掉前缀0bbinarybin(n)[2:]# 遍历字符串对比当前位与下一位foriinrange(len(binary)-1):# 若相邻两位相同直接返回falseifbinary[i]binary[i1]:returnFalse# 所有相邻位均不同返回truereturnTrue3.2 解法2位运算逐位对比高效版核心无字符串转换用位运算获取每一位对比相邻位性能优于解法1。classSolution:defhasAlternatingBits(self,n:int)-bool:# 特殊情况n1二进制为1无相邻位返回trueifn1:returnTrue# 记录上一位的二进制值最低位prevn1# 右移1位去掉最低位开始遍历剩余位nn1whilen0:# 获取当前最低位currentn1# 对比当前位与上一位相同则返回falseifcurrentprev:returnFalse# 更新上一位为当前位继续右移prevcurrent nn1# 所有位对比完毕无相同相邻位返回truereturnTrue3.3 解法3位运算优化极简版最优解核心利用异或特性和全1二进制数的规律一行核心代码最高效。classSolution:defhasAlternatingBits(self,n:int)-bool:# 核心逻辑n与n1异或若结果全为1则x(x1)0xn^(n1)return(x(x1))03.4 测试案例验证将题目示例和额外测试用例代入验证3种解法的正确性所有解法输出均一致# 测试示例1n15print(Solution().hasAlternatingBits(n1))# 输出True二进制101# 测试示例2n27print(Solution().hasAlternatingBits(n2))# 输出False二进制111# 测试示例3n311print(Solution().hasAlternatingBits(n3))# 输出False二进制1011# 额外测试用例n41# 二进制1print(Solution().hasAlternatingBits(n4))# 输出Truen52# 二进制10print(Solution().hasAlternatingBits(n5))# 输出Truen63# 二进制11print(Solution().hasAlternatingBits(n6))# 输出Falsen710# 二进制1010print(Solution().hasAlternatingBits(n7))# 输出True四、复杂度分析3种解法对比明确对比3种解法的时间和空间复杂度帮助选择适合自己的实现方式结合题干n的范围≤2³¹-1所有解法均能高效运行。解法时间复杂度空间复杂度核心说明解法1字符串对比O(log n)O(log n)n的二进制位数为log₂n字符串长度为log₂n遍历和存储均需O(log n)开销解法2位运算逐位对比O(log n)O(1)需遍历n的二进制每一位log₂n位仅用常数个变量无额外空间开销解法3位运算优化O(1)O(1)仅需3次位运算右移、异或、与运算与n的位数无关最优解补充说明题干中n的最大值为2³¹-1二进制位数仅31位因此即使是O(log n)的解法实际运算量也极小三种解法在LeetCode上的执行用时几乎无差异但解法3的理论性能最优。五、常见坑点与避坑技巧坑点1忽略n1的特殊情况导致循环不执行但返回错误结果。避坑n1的二进制是“1”无相邻位属于满足条件的情况需单独判断解法2已处理解法1和3无需单独处理因字符串长度为1遍历不执行直接返回true。坑点2转换二进制字符串时忘记去掉前缀“0b”导致遍历对比时出现错误。避坑Python的bin()函数返回格式为“0bxxxx”必须截取[2:]部分才能得到正确的二进制字符串解法1已处理。坑点3位运算时右移操作后未判断n是否为0导致死循环。避坑解法2中循环条件设为n0右移后n会逐渐变为0循环正常终止。坑点4误解“交替位”的含义认为“开头可以是0”导致判断错误。避坑正整数的二进制表示首位一定是1不存在开头为0的情况无需考虑此类场景。坑点5解法3中遗漏括号导致运算优先级错误如x x 1先执行再执行导致结果错误。避坑必须给(x 1)加括号确保先执行加法再执行与运算解法3已处理。六、拓展思考6.1 同类题目延伸本题的位运算思路可迁移到以下同类题目核心都是“二进制位判断”和“位运算运用”LeetCode 461. 汉明距离计算两个整数二进制表示中不同位的个数核心用异或统计1的个数LeetCode 191. 位1的个数统计一个整数二进制表示中1的个数核心用与运算右移LeetCode 67. 二进制求和实现两个二进制字符串的加法可结合本题的二进制遍历思路。6.2 思路拓展解法3的核心是“利用二进制特性简化计算”这种思路在位运算题目中非常常用。例如判断一个数是否为2的幂n (n-1) 0与本题解法3的思路异曲同工判断一个数是否为4的幂(n (n-1) 0) and (n 0x55555555 ! 0)结合二进制特性。掌握这类“二进制特性位运算”的思路能快速解决大量位运算相关的简单/中等难度题目。七、总结LeetCode 693. 交替位二进制数虽然是简单题但包含多种解题思路从直观的字符串对比到位运算优化能充分锻炼多思路解题能力。核心总结入门首选解法1字符串对比思路直观无需掌握位运算进阶首选解法2位运算逐位对比无字符串转换性能更优巩固位运算基础最优解选解法3位运算优化代码极简时间空间复杂度均为O(1)体现位运算的精髓。本题的关键是理解“交替位”的核心的是“相邻两位不同”无论是字符串遍历还是位运算都是围绕这一核心展开。刷题时不要满足于一种解法多尝试不同思路能更好地巩固知识点提升解题能力。所有解法均经过LeetCode测试可直接提交通过。如果在刷题过程中遇到问题可结合本文的坑点提示排查也可延伸练习同类位运算题目举一反三。创作不易如果你觉得本文对你有帮助欢迎点赞、收藏、评论你的支持是我持续创作LeetCode解析的动力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2506722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…