• leetcode-easy-others-191. Number of 1 Bits-NO


    mycode  不会。。。

    输入是二进制。。。。我还以为十进制。。。。 00000001011 = 11

    题意:

    编写一个将(无符号)整数作为输入的函数,并返回该数字二进制表示中等于1的位数。
    例如:输入1234,其二进制表示为10011010010,所以所要求实现函数的输出应该是5。

    参考

    1   移位+计数

    class Solution(object):
        def hammingWeight(self, n):
            """
            :type n: int
            :rtype: int
            """
            count = 0
            while n > 0 :
                if(n&1) == 1:
                    count = count+1
                n>>=1
            return count

    2、

    思路:用n&(n-1)来消去一个1 能循环多少次就是能消多少个1~

    因为如果那个位置本身就是1的话,那么减去一除了最后一位会变以外,其他都不会变 1111-1=1110;如果最后一位是0;则最右的1变为0,它右边的全部都取反一次,左边不变,然后与原本自己作与能恢复,变回只变换了一位的数据。如1000-1=0111  0111&1000=0000  实际上只把其中最右的1变为0而已;所以他能循环多少次就有多少个1.

    如x=0001101011000 

    x- 1  = 0001101010111   那么&之后,x右边第一个1的位置变为0,右边的0还是0,所以还是相当count一个1

    class Solution:
        def NumberOf1(self, n):
            if n<0:
                n = n & 0xffffffff
            cnt = 0
            while n:
                n = n&(n-1)
                cnt += 1
            return cnt
    def isPowerOfTwo(n):
        if n&(n-1):
            return False
        return True
        
    class Solution(object):
        def hammingWeight(self, n):
            """
            :type n: int
            :rtype: int
            """
            if n==0:
                return 0
            elif n<=2:
                return 1
            if isPowerOfTwo(n): #说明二进制数有且仅有一个1啦,所以消去了一个1后,if为False
                return 1
            else :
                c=0
                for i in range(32): 
                    c+=n%2  #感觉就是看最低位是不是1
                    n=n>>1
                return c

    3

    bin(n) 是python的一个系统函数,能够将n 转换为 0b110001 的二进制形式
    replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
    replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
    len() 再获取其长度,就是该数字二进制表示中等于1的位数
    虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。
    def hammingWeight(self, n):
    """
    :type n: int
    :rtype: int
    """
      return str(bin(n).replace("0b","")).count("1")

     或者

      return bin(n).count("1")
    return len(bin(n).replace("0b","").replace("0",""))
    bin(n) 是python的一个系统函数,能够将n 转换为 0b110001 的二进制形式
    replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
    replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
    len() 再获取其长度,就是该数字二进制表示中等于1的位数
    虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。


    作者:曹波波
    链接:https://www.jianshu.com/p/e642d225bb59
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    Docker----mysql数据持久化
    Docker-----容器数据卷
    Docker-----制造自己的镜像
    Docker----常用命令(镜像和容器的常用命令)
    Docker----阿里云镜像加速
    Docker概述
    com.aliyuncs.exceptions.ClientException: InvalidVersion : Specified parameter Version is not valid.
    夜神模拟器的使用踩坑--adb devices无法连接设备
    python利用smtplib模块发送邮件
    appium环境安装说明
  • 原文地址:https://www.cnblogs.com/rosyYY/p/11004268.html
Copyright © 2020-2023  润新知