leetcode693 发表于 2022-04-22 更新于 2026-04-29 分类于 leetcode 本文字数: 460 阅读时长 ≈ 1 分钟 题目给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 思路 遍历O(N) 位运算O(1),利用+1异或生成全1,加1生成全0,与0必为0。养成加括号的条件题目给出条件为正整数,负数题目不成立 代码1234567891011121314151617func hasAlternatingBits(n int) bool { if n==1 { return true } now:=n%2 n=n>>1 for n!=0 { next:=n%2 n=n>>1 if next^now!=1{ return false }else{ now=next } } return true} 1234func hasAlternatingBits(n int) bool { a := n ^ n>>1 return a&(a+1) == 0} 类似 137 190 191 260 405 461 477 526 觉得有帮助的请作者喝杯咖啡吧~ 打赏 微信支付 支付宝