191.位1的个数

题目描述

原题
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
1
输入:00000000000000000000000000001011
2
输出:3
3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'
Copied!
示例2:
1
输入:00000000000000000000000010000000
2
输出:1
3
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
Copied!
示例3:
1
输入:11111111111111111111111111111101
2
输出:31
3
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'
Copied!
提示:
    输入必须是长度为 32二进制串
进阶
    如果多次调用这个函数,你将如何优化你的算法?

题解

题解

方法一

1
public class Solution {
2
//循环向右移动n 然后与1比较
3
public int hammingWeight(int n) {
4
int count = 0;
5
while(n!=0){
6
count += n&1;
7
n >>>= 1;
8
}
9
return count;
10
}
11
}
Copied!

方法二

1
public class Solution {
2
// you need to treat n as an unsigned value
3
public int hammingWeight(int n) {
4
int count = 0;
5
while(n!=0){
6
count++; //
7
n &=(n-1);
8
}
9
return count;
10
}
11
}
Copied!
最近更新 3mo ago