File tree 3 files changed +96
-38
lines changed
3 files changed +96
-38
lines changed Original file line number Diff line number Diff line change 52
52
53
53
## 解法
54
54
55
- ` n & (n - 1) ` 会消除 n 中最后一位中的 1。
55
+ ** 方法一:位运算**
56
+
57
+ 由于 ` n & (n - 1) ` 会消除 $n$ 的二进制表示中的最后一个 $1$,因此对 $n$ 重复该操作,直到 $n$ 变成 $0$,此时的操作次数即为 $n$ 的二进制表示中的 $1$ 的个数。
58
+
59
+ 或者,我们可以用 ` lowbit ` 函数来获取 $n$ 的二进制表示中的最后一个 $1$,然后将 $n$ 减去这个 $1$,再重复该操作,直到 $n$ 变成 $0$,此时的操作次数即为 $n$ 的二进制表示中的 $1$ 的个数。` lowbit(x)=x&(-x) ` 。
60
+
61
+ 时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。其中 $n$ 为输入的整数。
56
62
57
63
<!-- tabs:start -->
58
64
59
65
### ** Python3**
60
66
67
+ ``` python
68
+ class Solution :
69
+ def hammingWeight (self , n : int ) -> int :
70
+ return n.bit_count()
71
+ ```
72
+
61
73
``` python
62
74
class Solution :
63
75
def hammingWeight (self , n : int ) -> int :
@@ -68,6 +80,16 @@ class Solution:
68
80
return ans
69
81
```
70
82
83
+ ``` python
84
+ class Solution :
85
+ def hammingWeight (self , n : int ) -> int :
86
+ ans = 0
87
+ while n:
88
+ n -= n & (- n)
89
+ ans += 1
90
+ return ans
91
+ ```
92
+
71
93
### ** Java**
72
94
73
95
``` java
@@ -84,33 +106,17 @@ public class Solution {
84
106
}
85
107
```
86
108
87
- ### ** JavaScript**
88
-
89
- ``` js
90
- /**
91
- * @param {number} n - a positive integer
92
- * @return {number}
93
- */
94
- var hammingWeight = function (n ) {
95
- let ans = 0 ;
96
- while (n != 0 ) {
97
- n &= n - 1 ;
98
- ++ ans;
109
+ ``` java
110
+ public class Solution {
111
+ // you need to treat n as an unsigned value
112
+ public int hammingWeight (int n ) {
113
+ int ans = 0 ;
114
+ while (n != 0 ) {
115
+ n -= n & - n;
116
+ ++ ans;
117
+ }
118
+ return ans;
99
119
}
100
- return ans;
101
- };
102
- ```
103
-
104
- ### ** Go**
105
-
106
- ``` go
107
- func hammingWeight (num uint32 ) int {
108
- ans := 0
109
- for num != 0 {
110
- num &= num - 1
111
- ans++
112
- }
113
- return ans
114
120
}
115
121
```
116
122
@@ -130,17 +136,70 @@ public:
130
136
};
131
137
```
132
138
139
+ ```cpp
140
+ class Solution {
141
+ public:
142
+ int hammingWeight(uint32_t n) {
143
+ int ans = 0;
144
+ while (n != 0) {
145
+ n -= n & -n;
146
+ ++ans;
147
+ }
148
+ return ans;
149
+ }
150
+ };
151
+ ```
152
+
153
+ ### ** Go**
154
+
155
+ ``` go
156
+ func hammingWeight (num uint32 ) (ans int ) {
157
+ for num != 0 {
158
+ num &= num - 1
159
+ ans++
160
+ }
161
+ return
162
+ }
163
+ ```
164
+
165
+ ``` go
166
+ func hammingWeight (num uint32 ) (ans int ) {
167
+ for num != 0 {
168
+ num -= num & -num
169
+ ans++
170
+ }
171
+ return
172
+ }
173
+ ```
174
+
175
+ ### ** JavaScript**
176
+
177
+ ``` js
178
+ /**
179
+ * @param {number} n - a positive integer
180
+ * @return {number}
181
+ */
182
+ var hammingWeight = function (n ) {
183
+ let ans = 0 ;
184
+ while (n != 0 ) {
185
+ n &= n - 1 ;
186
+ ++ ans;
187
+ }
188
+ return ans;
189
+ };
190
+ ```
191
+
133
192
### ** C#**
134
193
135
194
``` cs
136
195
public class Solution {
137
196
public int HammingWeight (uint n ) {
138
- int count = 0;
197
+ int ans = 0 ;
139
198
while (n != 0 ) {
140
- n = n & (n - 1);
141
- count++ ;
199
+ n &= (n - 1 );
200
+ ++ ans ;
142
201
}
143
- return count ;
202
+ return ans ;
144
203
}
145
204
}
146
205
```
Original file line number Diff line number Diff line change 1
1
public class Solution {
2
2
public int HammingWeight ( uint n ) {
3
- int count = 0 ;
3
+ int ans = 0 ;
4
4
while ( n != 0 ) {
5
- n = n & ( n - 1 ) ;
6
- count ++ ;
5
+ n &= ( n - 1 ) ;
6
+ ++ ans ;
7
7
}
8
- return count ;
8
+ return ans ;
9
9
}
10
10
}
Original file line number Diff line number Diff line change 1
- func hammingWeight (num uint32 ) int {
2
- ans := 0
1
+ func hammingWeight (num uint32 ) (ans int ) {
3
2
for num != 0 {
4
3
num &= num - 1
5
4
ans ++
6
5
}
7
- return ans
6
+ return
8
7
}
You can’t perform that action at this time.
0 commit comments