2
2
3
3
## 题目描述
4
4
5
- 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
5
+ < p >编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 < a href = " http://en.wikipedia.org/wiki/Hamming_weight " target = " _blank " >汉明重量</ a >).)。</ p >
6
6
7
- ** 示例 1: **
7
+ < p > </ p >
8
8
9
- ```
10
- 输入:00000000000000000000000000001011
11
- 输出:3
12
- 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
13
- ```
9
+ <p ><strong >提示:</strong ></p >
14
10
15
- ** 示例 2:**
11
+ <ul >
12
+ <li>请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。</li>
13
+ <li>在 Java 中,编译器使用 <a href="https://baike.baidu.com/item/二进制补码/5295284">二进制补码</a> 记法来表示有符号整数。因此,在上面的 <strong>示例 3 </strong>中,输入表示有符号整数 <code>-3</code>。</li>
14
+ </ul >
16
15
17
- ```
18
- 输入:00000000000000000000000010000000
19
- 输出:1
20
- 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
21
- ```
16
+ <p > </p >
22
17
23
- ** 示例 3: **
18
+ < p >< strong > 示例 1:</ strong ></ p >
24
19
25
- ```
26
- 输入:11111111111111111111111111111101
27
- 输出:31
28
- 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
29
- ```
20
+ <pre >
21
+ <strong >输入:</strong >n = 11 (控制台输入 00000000000000000000000000001011)
22
+ <strong >输出:</strong >3
23
+ <strong >解释:</strong >输入的二进制串 <code ><strong >00000000000000000000000000001011</strong > 中,共有三位为 '1'。</code >
24
+ </pre >
25
+
26
+ <p ><strong >示例 2:</strong ></p >
27
+
28
+ <pre >
29
+ <strong >输入:</strong >n = 128 (控制台输入 00000000000000000000000010000000)
30
+ <strong >输出:</strong >1
31
+ <strong >解释:</strong >输入的二进制串 <strong >00000000000000000000000010000000</strong > 中,共有一位为 '1'。
32
+ </pre >
33
+
34
+ <p ><strong >示例 3:</strong ></p >
35
+
36
+ <pre >
37
+ <strong >输入:</strong >n = 4294967293 (控制台输入 11111111111111111111111111111101,部分语言中 n = -3)
38
+ <strong >输出:</strong >31
39
+ <strong >解释:</strong >输入的二进制串 <strong >11111111111111111111111111111101</strong > 中,共有 31 位为 '1'。</pre >
40
+
41
+ <p > </p >
42
+
43
+ <p ><strong >提示:</strong ></p >
44
+
45
+ <ul >
46
+ <li>输入必须是长度为 <code>32</code> 的 <strong>二进制串</strong> 。</li>
47
+ </ul >
48
+
49
+ <p > </p >
50
+
51
+ <p >注意:本题与主站 191 题相同:<a href =" https://leetcode-cn.com/problems/number-of-1-bits/ " >https://leetcode-cn.com/problems/number-of-1-bits/</a ></p >
30
52
31
53
## 解法
32
54
33
55
` n & (n - 1) ` 会消除 n 中最后一位中的 1。
34
56
35
- 同 [ LeetCode 191. 位 1 的个数] ( /solution/0100-0199/0191.Number%20of%201%20Bits/README.md )
36
-
37
57
<!-- tabs:start -->
38
58
39
59
### ** Python3**
40
60
41
61
``` python
42
62
class Solution :
43
63
def hammingWeight (self , n : int ) -> int :
44
- res = 0
64
+ ans = 0
45
65
while n:
46
- n &= ( n - 1 )
47
- res += 1
48
- return res
66
+ n &= n - 1
67
+ ans += 1
68
+ return ans
49
69
```
50
70
51
71
### ** Java**
@@ -54,12 +74,12 @@ class Solution:
54
74
public class Solution {
55
75
// you need to treat n as an unsigned value
56
76
public int hammingWeight (int n ) {
57
- int res = 0 ;
77
+ int ans = 0 ;
58
78
while (n != 0 ) {
59
- n &= ( n - 1 ) ;
60
- ++ res ;
79
+ n &= n - 1 ;
80
+ ++ ans ;
61
81
}
62
- return res ;
82
+ return ans ;
63
83
}
64
84
}
65
85
```
@@ -72,12 +92,12 @@ public class Solution {
72
92
* @return {number}
73
93
*/
74
94
var hammingWeight = function (n ) {
75
- let cnt = 0 ;
76
- while (n) {
77
- cnt + = n & 1 ;
78
- n >>>= 1 ;
95
+ let ans = 0 ;
96
+ while (n != 0 ) {
97
+ n & = n - 1 ;
98
+ ++ ans ;
79
99
}
80
- return cnt ;
100
+ return ans ;
81
101
};
82
102
```
83
103
@@ -86,7 +106,6 @@ var hammingWeight = function (n) {
86
106
``` go
87
107
func hammingWeight (num uint32 ) int {
88
108
ans := 0
89
- // num &=num-1 消除最右边的1
90
109
for num != 0 {
91
110
num &= num - 1
92
111
ans++
@@ -102,8 +121,9 @@ class Solution {
102
121
public:
103
122
int hammingWeight(uint32_t n) {
104
123
int ans = 0;
105
- while (n) {
106
- n &= (n - 1);
124
+ while (n)
125
+ {
126
+ n &= n - 1;
107
127
++ans;
108
128
}
109
129
return ans;
0 commit comments