【一天一道Leetcode】位1的个数

2021-04-20 15:56:20 浏览数 (1)

01

题目描述

题目描述:

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量)。

示例:

代码语言:javascript复制
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串00000000000000000000000000001011中,
共有三位为 '1'。

提示:

1.输入必须是长度为32的二进制串。

02

思路和方法

由题意可知,

首先可以判断输入num的最后一位是否为1。

如果为1,则计数器加1,

然后二进制数向右移动丢弃最后一位。

循环执行上述操作直到num的值等于0为止。

我们用代码表示为:

代码语言:javascript复制
class Solution(object):
    def hammingWeight(self, n):
        i = 0
        while n !=0:
            if n & 1==1:
                i =1
            n=n>>1
        return i

当然本题还有一种快速解法:

通过调用Python的内置函数bin()

代码语言:javascript复制
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

示例:

代码语言:javascript复制
Python内置函数:bin() 
//返回一个整数 int 或者长整数 long int 的二进制表示。

示例:
输入为:bin(2)
输出为:10

通过调用内置函数bin()与count()。可以直接返回二进制中1的个数。

代码语言:javascript复制
count()用于统计字符串里某个字符出现的次数

综上可知,解题代码如下:

代码语言:javascript复制
class Solution(object):
    def hammingWeight(self, n):
        return bin(n).count("1")

0 人点赞