来源:力扣(LeetCode)
链接:https://leetcode-cn.com/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
【解题思路】
从后向前,逐步判断相邻位的两个数是否相同即可。
具体步骤:
- 用
last
表示前一位上的数,并赋初值为n%2
- 把
n
的二进制数向右移动一位,用current
表示当前位上的数,其值为n%2
。如果current==last
,返回False
;否则,令last=current
。迭代执行该步骤,直到n//2==0
- 返回True
【提交代码】
class Solution:
def hasAlternatingBits(self, n: int) -> bool:
last = n % 2 # 前一位上的数
while(n//2!=0):
n //= 2 # 二进制右移操作对应该数对2取商
# 比较当前位上的数是否等于前一位上的数
if n%2==last:
return False
else:
last = n % 2
return True
【运行结果】