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

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

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解析的动力

相关文章:

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

LeetCode 693. 交替位二进制数(详细解析 多解法实现) 前言:LeetCode 693. 交替位二进制数是一道简单难度的位运算题目,核心考察对二进制表示、位运算操作的理解与运用。本题看似简单,但存在多种解题思路,从…...

LeetCode 696. 计数二进制子串(详细解析 + 多解法实现)

LeetCode 696. 计数二进制子串(详细解析 多解法实现) 前言:LeetCode 696. 计数二进制子串是一道经典的字符串处理题目,难度中等,核心考察对字符串分组、规律提炼的能力。本题看似简单,但如果暴力求解会超…...

手把手教你从零搭建Ubuntu20.04下的ROS2开发环境

1. 为什么选择Ubuntu 20.04和ROS2 机器人开发领域近年来发展迅猛,而ROS2作为第二代机器人操作系统,已经成为行业新标准。相比第一代ROS,ROS2在实时性、跨平台支持和分布式架构等方面都有显著提升。我最初接触ROS2时也经历过不少挫折&#xff…...

Unity中控系统实战:从零构建智能展厅控制中枢

1. 为什么选择Unity开发智能展厅中控系统? 第一次接触展厅中控需求时,我考虑过很多方案:传统的PLC控制、Web中控系统、甚至专门的控制软件。但最终选择Unity的原因很简单——它能完美解决三个核心痛点: 首先,跨平台特性…...

【计算机视觉入门精讲】第一站:图像处理与视觉基础

1. 图像的本质:从数学函数到像素矩阵 第一次接触计算机视觉时,最让我震撼的发现是:原来照片就是个数学函数。想象你面前有张黑白老照片,每个位置(x,y)的颜色深浅,其实就是一个函数值f(x,y)。这个函数把二维坐标映射到亮…...

2026年精选OK镜推荐榜单,三款高口碑安全品牌助您护眼新体验

在这篇文章中,我们将深入探讨OK镜的安全性以及推荐的高口碑品牌。尤其是梦戴维(Dream Vision)、小调皮和梦小新这三款品牌,通过结合用户反馈和实际评测,帮助大家更好地了解各自的特点与优势。值得一提的是,这些品牌的AP185和DV185…...

AI编程时代,人类程序员还剩下什么?驳

故障表现 发现请求集群 demo 入口时卡住,并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NO…...

如何快速掌握Mermaid在线编辑器:面向技术团队的完整实践指南

如何快速掌握Mermaid在线编辑器:面向技术团队的完整实践指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-…...

ICCV-2025 | 同济上海AILab VLN-PE:多模态感知与物理仿真融合的具身导航新范式

1. 当机器人学会"看图说话":VLN-PE如何重新定义导航 想象一下,你正指挥一台人形机器人在陌生大楼里找会议室。传统导航系统可能需要精确的坐标输入,而VLN-PE让机器人能像人类一样,通过"往前走20米,在第…...

免费终极指南:3分钟将Windows电脑变成专业级WiFi路由器

免费终极指南:3分钟将Windows电脑变成专业级WiFi路由器 【免费下载链接】VirtualRouter Wifi Hotspot for Windows computers (Windows 7, 8.x, Server 2012 and newer!) 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualRouter VirtualRouter是一款革命…...

Python开发者必看:如何用mybatis-python-wrapper轻松操作MySQL数据库

Python开发者必看:如何用mybatis-python-wrapper轻松操作MySQL数据库 在Python生态中,数据库操作一直是开发者关注的重点。虽然SQLAlchemy和Django ORM等工具已经非常成熟,但对于熟悉Java生态中MyBatis的开发者来说,能否在Python项…...

别再纠结BF16和FP16了!手把手教你为你的LLM项目选对精度格式(含PyTorch配置示例)

BF16与FP16实战指南:为你的LLM项目选择最佳精度格式 当你在深夜调试一个7B参数的LLM模型时,突然发现训练过程中频繁出现NaN值——这可能是因为选错了浮点精度格式。作为一名经历过无数次类似场景的工程师,我想分享一些从实战中总结的经验&…...

UniversalSplitScreen:为任意游戏实现分屏多人游戏的技术解析与实战指南

UniversalSplitScreen:为任意游戏实现分屏多人游戏的技术解析与实战指南 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/Universal…...

Mac空格键的终极魔法:100+ QuickLook插件完全指南

Mac空格键的终极魔法:100 QuickLook插件完全指南 【免费下载链接】Mac-QuickLook QuickLook plugins and packages 项目地址: https://gitcode.com/gh_mirrors/ma/Mac-QuickLook 想象一下,在Mac上只需按下空格键,就能瞬间预览任何文件…...

3种方式解决本地大模型推理的Python性能瓶颈

3种方式解决本地大模型推理的Python性能瓶颈 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 还在为本地运行大型语言模型时的性能瓶颈而苦恼吗?llama-cpp-python作为llama…...

告别复制粘贴!用Zotero+BibTeX一键搞定IEEE会议论文参考文献(Better BibTeX插件实战)

科研效率革命:ZoteroBibTeX全自动文献管理方案 在撰写学术论文时,参考文献管理往往是耗时又容易出错的一环。特别是对于需要频繁投稿IEEE会议的研究人员来说,手动复制粘贴bibtex条目、整理citation key的过程既枯燥又低效。想象一下&#xff…...

唯理科技发布用于科研和腕部数据采集训练的神经腕带

Meta近日在发布会上公布了其神经肌电腕带产品,创新的交互方式让人机交互更具想象空间。其技术原理是使用生物电芯片采集神经电位和EMG,通过算法来判断手势运动意图,这让肌电神经腕带逐渐走入更多人的视野,在未来的人机交互场景下拥…...

GHelper终极指南:5分钟掌握华硕笔记本硬件智能控制

GHelper终极指南:5分钟掌握华硕笔记本硬件智能控制 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar,…...

LDPC码实战:用Python对比比特翻转(BF)与和积(SPA)算法,谁更强?

LDPC码算法对决:Python实战比特翻转与和积译码性能全解析 在通信系统设计与优化过程中,LDPC码作为接近香农极限的高性能编码方案,其译码算法的选择直接影响系统性能与实现成本。本文将带您深入两种经典译码算法——比特翻转(BF)与和积(SPA)的…...

2026精选记事软件前五名轻松管理日常待办事项

2026年,市面上的记事软件五花八门,打开应用商店一搜,各类榜单琳琅满目,从主打极简的便签到功能全面的全能工具,让人挑得眼花缭乱。作为一名在互联网公司打拼三年的普通打工人,我每天要应对密密麻麻的工作任…...

边走边聊 Python 3.8:Chapter 5:面向对象:把生活里的“东西”变成类

Chapter 5:面向对象:把生活里的“东西”变成类 当程序变得复杂,面向对象就是你组织世界的方式。本章将带你理解类、对象、继承、多态、属性这些核心概念,并通过生活化的例子让你真正掌握 OOP 的思维方式。你会发现:当你能把生活抽象成类,你就能把复杂变简单,把混乱变秩…...

RAG的完整链路拆解:从文档切片到向量检索到LLM回答

RAG是目前最主流的破解方案:不改模型,而是在回答之前先去知识库里把相关信息捞出来,跟问题一起喂给LLM。LLM从万事通变成了带参考资料的答题者。 上篇我们搞清了一件事:LLM的知识边界就是训练数据的边界。超出这个边界它不会说不知…...

聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?诖

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

GLM-5.1 月卡 99 元无限 Token:是真香还是割韭菜?实测避坑指南GLM-5.1 月卡 99 元无限 Token:是真香还是割韭菜?实测避坑指南

GLM-5.1 月卡 99 元无限 Token:是真香还是割韭菜?实测避坑指南 先说结论:适合特定人群,但坑点不少,入手前必须看清条款。 最近智谱 GLM-5.1 推出了 99.9 元/月的"无限 Token"订阅方案,在开发者圈…...

VSCode插件党福音:实测阿里通义灵码的代码续写与注释生成到底有多香

VSCode插件党福音:实测阿里通义灵码的代码续写与注释生成到底有多香 作为一名每天与VSCode相伴8小时以上的全栈开发者,我一直在寻找能真正融入编码工作流的智能辅助工具。直到遇见阿里云推出的通义灵码插件,这款基于通义大模型的AI编程助手彻…...

嵌入式开发实战:为Android设备交叉编译mmc-utils工具集

1. 为什么需要交叉编译mmc-utils 在嵌入式开发中,我们经常需要与eMMC存储设备打交道。mmc-utils就是这样一套专门用于管理eMMC存储设备的实用工具集,它提供了读取extcsd、修改分区配置、设置写保护等强大功能。但问题来了——Android设备通常没有预装这些…...

OrCAD原理图打印终极指南:Instance和Occurrence模式选择对PDF标签的影响

OrCAD原理图打印终极指南:Instance和Occurrence模式选择对PDF标签的影响 在复杂电路设计中,原理图的清晰呈现与高效导航直接关系到团队协作效率与后期维护成本。作为Cadence OrCAD的核心功能之一,Instance与Occurrence模式的选择往往被工程师…...

Keyence VT5 HMI嵌入式串口通信库深度解析

1. KeyenceHMI_Lib 库深度解析:面向工业现场的嵌入式 HMI 串行通信实现1.1 工程定位与核心价值KeyenceHMI_Lib 是一个专为 Arduino 平台(基于 PlatformIO 构建环境)设计的轻量级 C 库,其唯一且明确的工程目标是:在资源…...

别再只盯着普通图了!用Python+NetworkX快速上手超图(Hypergraph)建模,搞定复杂关系分析

用PythonNetworkX解锁超图建模:从理论到复杂关系分析实战 第一次听说"超图"这个概念时,我正为一个电商推荐系统的项目头疼——传统的图结构无法准确表达用户同时浏览多个商品的行为模式。直到发现超图(Hypergraph)这种…...

3大挑战如何破解:智能工具重塑资源获取新范式

3大挑战如何破解:智能工具重塑资源获取新范式 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在信息爆炸的数字时代,智能资源获取已成为提升工作效率的关键技能。你是否曾因频繁查找百度网盘提取码而浪…...