题目一:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
示例 1:
输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
思路一:
输入的十进制数直接转为二进制数,然后循环字符,十进制转二进制就不在这里单独说了,直接看代码
代码:
class Solution:
def hammingWeight(self, n: int) -> int:
a, b, c = n,"",0
while(a>=1):
b = str(a%2)+b
a=a//2
for i in str(b):
if int(i)==1:
c+=1
return c
思路二:
利用位运算,因为控制台会自动帮我们转为二进制,分两种情况,n&1=0,说明n的最右边一位是0;n&1=1,最右边一位是1,然后采用正数右移的方法。
代码:
class Solution:
def hammingWeight(self, n: int) -> int:
res = 0
while n:
res += n&1
n>>=1#右移
return res
思路三:调用函数
class Solution:
def hammingWeight(self, n: int) -> int:
return bin(n).count('1')#最快
题目二:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
代码:
class Solution:
def printNumbers(self, n: int) -> List[int]:
num = 10**n-1
list = []
for i in range(1,num+1):
list.append(i)
return list