请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
来源:力扣(LeetCode)
打个比方说:
输入 9,9/2=4–1,4/2=2–0,2/2=1—0,1/2=0–1
看吧,结果似乎很明显。将余数按顺序排列:1001;
输入 11, 11/2=5–1, 5/2=2–1, 2/2=1–0, 1/2=0–1
余数顺序排列:1101
神奇吧:)
另一种类似的,因为除以2余数不是0就是1,所以直接加余数也是解。
# -*- coding: utf-8 -*-
#!/usr/bin/env python
"""
Created on Thu Jul 23 15:31:11 2020
@author: MRN_6
@github: https://github.com/WowlNAN
@blog: https://blog.csdn.net/qq_21264377
"""
class Solution:
def __init__(self):pass
def hammingWeight(self, n: int) -> int:
'''
a=0
b=''
while n>0:
if n%2==0:
b+='0'
else:
b+='1'
n//=2
print(b)
return b.count('1')
'''
# 优化代码
a=0
while n>0:
if n%2!=0:
a+=1
n//=2 #n=int(n/2)
return a