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
  • 相关阅读:
    HDOJ1004
    HDOJ1001
    HDOJ1000
    HDOJ1003
    HDOJ1005
    新手如何正确使用CLion之输出hello world
    hihoCoder#1032 : 最长回文子串
    P3805 【模版】manacher算法(manacher)
    P1198 [JSOI2008]最大数(单调栈)
    P1351 联合权值
  • 原文地址:https://www.cnblogs.com/bonelee/p/8546022.html
Copyright © 2011-2022 走看看