LeetCode 693.交替位二进制数:位运算(O(1)非O(log n))

📅 发布时间:2026/7/16 16:22:00 👁️ 浏览次数:
LeetCode 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 nn是01交替时有n ^ ( n 1 ) n\ \hat{}\ (n1)n^(n1)全是1。假设x n ^ ( n 1 ) xn\ \hat{}\ (n1)xn^(n1)如何判断x xx中是否全是1 11呢令1111111100000010000001111110。当且仅当x xx二进制下全是1时有x ( x 1 ) 0 x\(x1)0x(x1)0。时间复杂度O ( 1 ) O(1)O(1)空间复杂度O ( 1 ) O(1)O(1)注意计算过程中不要超过有符号型int32。AC代码C/* * LastEditTime: 2026-02-18 14:54:30 */classSolution{public:boolhasAlternatingBits(intn){unsignedx(n1)^n;return((x1)x)0;}};Python LastEditTime: 2026-02-18 15:02:19 classSolution:defhasAlternatingBits(self,n:int)-bool:x(n1)^nreturn(x1)x0Java/* * LastEditTime: 2026-02-18 15:00:15 */classSolution{publicbooleanhasAlternatingBits(intn){intx(n1)^n;return(x(x1))0;}}Go/* * LastEditTime: 2026-02-18 15:01:13 */packagemainfunchasAlternatingBits(nint)bool{x:(n1)^nreturn(x(x1))0}Rust/* * LastEditTime: 2026-02-18 14:59:11 */implSolution{pubfnhas_alternating_bits(n:i32)-bool{letx:usize((n1)^n)asusize;(x(x1))0}}同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源