给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例 1:
输入:n = 5
输出:true
解释:5 的二进制表示是:101
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits
注意 是没有相同的则返回true
class Solution(object):
def hasAlternatingBits(self, n):
"""
:type n: int
:rtype: bool
"""
#遍历比特位
for i in range(0, len(bin(n))-2):
#每次观察相邻两位,i位与i+1位,从低位开始观察
#n右移i位与i+1位都和1与,结果相等 说明n的二进制表示中
#相邻两个i位与i+1位的二进制值相等,return false
if (n >> i) & 1 == (n >> (i+1) & 1):
return False
return True
有更简化的方法,就是直接检查‘00’ 和‘11’在不在二进制表示字符串里头。