leetcode_693 交替位二进制数

219 阅读1分钟

要求

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

示例 1:

输入:n = 5
输出:true
解释:5 的二进制表示是:101

示例 2:

输入:n = 7
输出:false
解释:7 的二进制表示是:111.

示例 3:

输入:n = 11
输出:false
解释:11 的二进制表示是:1011.

示例 4:

输入:n = 10
输出:true
解释:10 的二进制表示是:1010.

示例 5:

输入:n = 3
输出:false

核心代码

class Solution:
    def hasAlternatingBits(self, n: int) -> bool:
        n,flag = divmod(n,2)
        while n:
            n,t = divmod(n,2)
            if t == flag:
                return False
            flag = t
        return True

另一解法

class Solution:
    def hasAlternatingBits(self, n: int) -> bool:
        b = bin(n)[2:]
        b = list(b)
        for i in range(len(b)-1):
            if b[i] == b[i+1]:
                return False
        return True

image.png

解题思路:第一种解法:我们不断地使用divmod这个函数得到商和余数,然后让前一位的余数和后一位的余数相比,相同直接返回False,全部不同,返回True。第二种解法:使用bin变成二进制字符串,循环遍历前位和后位的关系即可。