题目描述
输入一个32位整数,输出该数二进制表示中1的个数。
注意:
- 负数在计算机中用其绝对值的补码来表示。
样例1
输入:9
输出:2
解释:9的二进制表示是1001,一共有2个1。
样例2
输入:-2
输出:31
解释:-2在计算机里会被表示成11111111111111111111111111111110,
一共有31个1。
算法1
(别的题解) $O(log_{2}n)$
见别的题解
时间复杂度 $O(log_{2}n)$
参考文献 无
C++ 代码
class Solution {
public:
int NumberOf1(int n) {
int count=0;
while(n!=0){
n&=n-1;
count++;
}
return count;
}
};
C 代码
int NumberOf1(int n){
int count=0;
while(n!=0){
n&=n-1;
count++;
}
return count;
}
Java 代码
class Solution {
public int NumberOf1(int n)
{
int count=0;
while(n!=0){
n&=n-1;
count++;
}
return count;
}
}
Python 代码
class Solution(object):
def NumberOf1(self,n):
"""
:type n: int
:rtype: int
"""
new_n=abs(n)
res=[]
while new_n!=0:
res.append(new_n%2)
new_n//=2
if n>=0:
sum_n=res.count(1)
else:
num=32-len(res)
sum_n=num+res.count(1)
return sum_n
Javascript 代码
/**
* @param {number} n
* @return {number}
*/
var NumberOf1 = function(n) {
var count=0;
while(n!=0){
n&=n-1;
count++;
}
return count;
};
Python3 代码
class Solution(object):
def NumberOf1(self,n):
"""
:type n: int
:rtype: int
"""
new_n=abs(n)
res=[]
while new_n!=0:
res.append(new_n%2)
new_n//=2
if n>=0:
sum_n=res.count(1)
else:
num=32-len(res)
sum_n=num+res.count(1)
return sum_n
Go 代码
func NumberOf1(n int) int {
count:=0
for n!=0{
n&=n-1
count++
}
return count
}
num = int(input(“输入一个整数:”))
num_b = str(bin(num))
count = 0
for i in num_b:
if i == ‘1’:
count += 1
print(count)
你好,你这个python代码有问题,-732,你试试这个数,你的程序虽然能过但是算出来答案不对