题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目链接: https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8
分析
- 首先用list存储整数的二进制形式;
- 如果为正数,返回list的和;
- 否则,list中{0,1}取反,再加一。
参考代码
class Solution:
def NumberOf1(self, n):
# write code here
index=abs(n)
li=[0]*32
i=-1
while(index>0):
li[i]=index%2
index//=2
i-=1
if(n>0):
return sum(li)
else:
l=[0 if ii else 1 for ii in li]
left=1
for i in range(len(l)-1,-1,-1):
if(not left):
break
if(l[i]):
if(left):
l[i]=0
else:
if(left):
l[i] = 1
left=0
return sum(l)
运行时间: 21ms
占用内存: 5736k