zoukankan      html  css  js  c++  java
  • leetcode 693. Binary Number with Alternating Bits

    Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

    Example 1:

    Input: 5
    Output: True
    Explanation:
    The binary representation of 5 is: 101
    

    Example 2:

    Input: 7
    Output: False
    Explanation:
    The binary representation of 7 is: 111.
    

    Example 3:

    Input: 11
    Output: False
    Explanation:
    The binary representation of 11 is: 1011.
    

    Example 4:

    Input: 10
    Output: True
    Explanation:
    The binary representation of 10 is: 1010.
    
    解法1:
    class Solution(object):
        def hasAlternatingBits(self, n):
            """
            :type n: int
            :rtype: bool
            """
            # check every bit is diff from last bit
            last_bit = n & 1
            n = n >> 1        
            while n:             
                bit = n & 1
                if last_bit + bit != 1:
                    return False
                last_bit = bit
                n = n >> 1
            return True              

    解法2: 移位再相加后,看是否为2的n次方

    class Solution(object):
        def hasAlternatingBits(self, n):
            """
            :type n: int
            :rtype: bool
            """
            num = n + (n >> 1) + 1
            return (num & (num-1)) == 0
            

    解法3:直接使用bin函数

    def hasAlternatingBits(self, n):
            s = bin(n)
            return '00' not in s and '11' not in s
  • 相关阅读:
    3.10 Go Map哈希表
    3.9 Go Slice切片
    3.8 Go Array数组
    3.7 Go指针
    3.6 Go String型
    3.5 Go布尔型
    3.4 Go字符型
    3.3 Go浮点型
    3.2 Go整数类型
    3.1Go变量
  • 原文地址:https://www.cnblogs.com/bonelee/p/8546022.html
Copyright © 2011-2022 走看看