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

看那个码农

共 1464字,需浏览 3分钟

 · 2021-04-11


本篇推文共计2000个字,阅读时间约3分钟。



01


题目描述


题目描述:


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

 

示例:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串00000000000000000000000000001011中,
共有三位为 '1'


提示:

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




02


思路和方法


由题意可知,

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


如果为1,则计数器加1

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

 

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




我们用代码表示为:

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()

bin() 返回一个整数 int 或者长整数 long int 的二进制表示。


示例:

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

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


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


count()用于统计字符串里某个字符出现的次数


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

class Solution(object):
    def hammingWeight(self, n):
        return bin(n).count("1")




往期回顾

【年终总结】你好2021,再见2020。


【秋招纪实录】一篇特别正经的【腾讯】求职经验分享


【一天一道Leetcode】删除有序数组的重复项Ⅱ



☆ END ☆

你与世界

只差一个

公众号

浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报