题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
Ways
注意啦,不能使用bin(n).count(‘1’)这个做法,因为n是负数时该式子不成立。
可以使用下面的方法:python要使用n & 0xffffffff
得到一个数的补码。。我也不懂为什么..
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
cnt = 0
if n < 0:
n = n & 0xffffffff
return bin(n).count('1')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
可以使用一个mask来表示正在看到的位数,循环32次,那么就得到了每一个位置上是1的个数。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
mask = 1
cnt = 0
for i in range(32):
if n & mask:
cnt += 1
mask <<= 1
return cnt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
本题最快的解法是使用n & (n - 1)消去n最后一位的1.消了几次就是n中有几个1.
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
cnt = 0
if n < 0:
n = n & 0xffffffff
while n:
n = n & (n - 1)
cnt += 1
return cnt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10