题解 | #二进制中1的个数#
二进制中1的个数
http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8
# 负数的二进制等于反码+1==补码
# 所以负数二进制中1的个数为
# 32-整数1的个数+(如果反码的最后一个数为0,则+1, 如果反码的最后一个数为1,则要判断反码前面有多少个连续的1,再-1)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @return int整型
#
#负数的二进制等于反码+1==补码
class Solution:
def NumberOf1(self , n: int) -> int:
# write code here
binary_list = []
count = 0
if n == 0:
return 0
elif n < 0 :
n = (-1) * n
while n != 0:
binary_list.insert(0, n % 2)
y = n % 2
if y == 1:
count += 1
n = n // 2
if binary_list[-1] == 1:
return 32 - count + 1
else:
for i in range(len(binary_list)-2, -1, -1):
if binary_list[i] != 0:
return 32-count-(len(binary_list)-1-i)+1
else:
while n != 0:
y = n % 2
if y == 1:
count += 1
n = n // 2
return count