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
  • 相关阅读:
    linux echo 换行
    linux 脚本 逻辑关系的写法及区别
    linux vim ***
    跟我一起学Makefile
    linux awk
    linux grep命令 ***
    unbuntu 安装及服务器配置
    linux 静态库文件
    samba 配置
    linux tar
  • 原文地址:https://www.cnblogs.com/bonelee/p/8546022.html
Copyright © 2011-2022 走看看