劍指Offer-Python-二進位制中1的個數
阿新 • • 發佈:2019-02-08
題目
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
思路:
暴力解決:分為兩種情況:一種整數n>=0,直接化為二進位制.一種n<0,求其補碼。其中求補碼的方法為將其用原碼錶示,然後從右邊第一個為‘1’的數起往左依次取反(取反操作即與1異或,0^1=1,1^1=0)。
注意:該題是32位。
程式碼
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
if n >= 0:
num = ('{:032b}' .format(n))
else:
res = ('{:032b}'.format(-n))[1:]
num = '1'
flag = 0
for i in range(len(res)-1,-1,-1):
if res[i] == '1':
index = i
flag = 1
break
if flag:
for i in res[:index]:
num += str(int(i) ^ 1)
num += res[index:]
else:
num += res
print(num,len(num))
return num.count('1')