693.交替位二进制数:位运算(O(1)非O(log n))
【LetMeFly】693.交替位二进制数:位运算(O(1)非O(log n))
力扣题目链接:https://leetcode.cn/problems/binary-number-with-alternating-bits/
给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例 1:
输入:n = 5 输出:true 解释:5 的二进制表示是:101
示例 2:
输入:n = 7 输出:false 解释:7 的二进制表示是:111.
示例 3:
输入:n = 11 输出:false 解释:11 的二进制表示是:1011.
提示:
1 <= n <= 231 - 1
解题方法:位运算
假设原来数字是101010,那么右移一位后变成010101,异或变成111111。
当且仅当原数字$n$是01交替时有$n\ \hat{}\ (n>>1)$全是1。
假设$x=n\ \hat{}\ (n>>1)$,如何判断$x$中是否全是$1$呢?令111111+1=1000000,1000000&111111=0。
当且仅当$x$二进制下全是1时有$x&(x+1)=0$。
- 时间复杂度$O(1)$
- 空间复杂度$O(1)$
注意计算过程中不要超过有符号型int32。
AC代码
C++
1 | |
Python
1 | |
Java
1 | |
Go
1 | |
Rust
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
693.交替位二进制数:位运算(O(1)非O(log n))
https://blog.letmefly.xyz/2026/02/18/LeetCode 0693.交替位二进制数/