Skip to content

Commit a0d9515

Browse files
committed
feat: add solutions to lc/lcof problems
lc No.0191 & lcof No.15.Number of 1 Bits
1 parent e2bd61c commit a0d9515

File tree

13 files changed

+187
-87
lines changed

13 files changed

+187
-87
lines changed

lcof/面试题15. 二进制中1的个数/README.md

+57-37
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,70 @@
22

33
## 题目描述
44

5-
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9  表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
5+
<p>编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 <a href="http://en.wikipedia.org/wiki/Hamming_weight" target="_blank">汉明重量</a>).)。</p>
66

7-
**示例 1:**
7+
<p> </p>
88

9-
```
10-
输入:00000000000000000000000000001011
11-
输出:3
12-
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
13-
```
9+
<p><strong>提示:</strong></p>
1410

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>
1615

17-
```
18-
输入:00000000000000000000000010000000
19-
输出:1
20-
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
21-
```
16+
<p> </p>
2217

23-
**示例 3:**
18+
<p><strong>示例 1:</strong></p>
2419

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>
3052

3153
## 解法
3254

3355
`n & (n - 1)` 会消除 n 中最后一位中的 1。
3456

35-
[LeetCode 191. 位 1 的个数](/solution/0100-0199/0191.Number%20of%201%20Bits/README.md)
36-
3757
<!-- tabs:start -->
3858

3959
### **Python3**
4060

4161
```python
4262
class Solution:
4363
def hammingWeight(self, n: int) -> int:
44-
res = 0
64+
ans = 0
4565
while n:
46-
n &= (n - 1)
47-
res += 1
48-
return res
66+
n &= n - 1
67+
ans += 1
68+
return ans
4969
```
5070

5171
### **Java**
@@ -54,12 +74,12 @@ class Solution:
5474
public class Solution {
5575
// you need to treat n as an unsigned value
5676
public int hammingWeight(int n) {
57-
int res = 0;
77+
int ans = 0;
5878
while (n != 0) {
59-
n &= (n - 1);
60-
++res;
79+
n &= n - 1;
80+
++ans;
6181
}
62-
return res;
82+
return ans;
6383
}
6484
}
6585
```
@@ -72,12 +92,12 @@ public class Solution {
7292
* @return {number}
7393
*/
7494
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;
7999
}
80-
return cnt;
100+
return ans;
81101
};
82102
```
83103

@@ -86,7 +106,6 @@ var hammingWeight = function (n) {
86106
```go
87107
func hammingWeight(num uint32) int {
88108
ans := 0
89-
// num &=num-1 消除最右边的1
90109
for num != 0 {
91110
num &= num - 1
92111
ans++
@@ -102,8 +121,9 @@ class Solution {
102121
public:
103122
int hammingWeight(uint32_t n) {
104123
int ans = 0;
105-
while (n) {
106-
n &= (n - 1);
124+
while (n)
125+
{
126+
n &= n - 1;
107127
++ans;
108128
}
109129
return ans;

lcof/面试题15. 二进制中1的个数/Solution.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ class Solution {
22
public:
33
int hammingWeight(uint32_t n) {
44
int ans = 0;
5-
while (n) {
6-
n &= (n - 1);
5+
while (n)
6+
{
7+
n &= n - 1;
78
++ans;
89
}
910
return ans;
1011
}
11-
};
12+
};

lcof/面试题15. 二进制中1的个数/Solution.go

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
func hammingWeight(num uint32) int {
22
ans := 0
3-
// num &=num-1 消除最右边的1
43
for num != 0 {
54
num &= num - 1
65
ans++
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
public class Solution {
22
// you need to treat n as an unsigned value
33
public int hammingWeight(int n) {
4-
int res = 0;
4+
int ans = 0;
55
while (n != 0) {
6-
n &= (n - 1);
7-
++res;
6+
n &= n - 1;
7+
++ans;
88
}
9-
return res;
9+
return ans;
1010
}
1111
}

lcof/面试题15. 二进制中1的个数/Solution.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
* @return {number}
44
*/
55
var hammingWeight = function (n) {
6-
let cnt = 0;
7-
while (n) {
8-
cnt += n & 1;
9-
n >>>= 1;
6+
let ans = 0;
7+
while (n != 0) {
8+
n &= n - 1;
9+
++ans;
1010
}
11-
return cnt;
11+
return ans;
1212
};
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution:
22
def hammingWeight(self, n: int) -> int:
3-
res = 0
3+
ans = 0
44
while n:
5-
n &= (n - 1)
6-
res += 1
7-
return res
5+
n &= n - 1
6+
ans += 1
7+
return ans

solution/0100-0199/0191.Number of 1 Bits/README.md

+41-11
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,11 @@
7878
```python
7979
class Solution:
8080
def hammingWeight(self, n: int) -> int:
81-
res = 0
81+
ans = 0
8282
while n:
83-
n &= (n - 1)
84-
res += 1
85-
return res
83+
n &= n - 1
84+
ans += 1
85+
return ans
8686
```
8787

8888
### **Java**
@@ -93,16 +93,46 @@ class Solution:
9393
public class Solution {
9494
// you need to treat n as an unsigned value
9595
public int hammingWeight(int n) {
96-
int res = 0;
96+
int ans = 0;
9797
while (n != 0) {
98-
n &= (n - 1);
99-
++res;
98+
n &= n - 1;
99+
++ans;
100100
}
101-
return res;
101+
return ans;
102102
}
103103
}
104104
```
105105

106+
### **Go**
107+
108+
```go
109+
func hammingWeight(num uint32) int {
110+
ans := 0
111+
for num != 0 {
112+
num &= num - 1
113+
ans++
114+
}
115+
return ans
116+
}
117+
```
118+
119+
### **C++**
120+
121+
```cpp
122+
class Solution {
123+
public:
124+
int hammingWeight(uint32_t n) {
125+
int ans = 0;
126+
while (n)
127+
{
128+
n &= n - 1;
129+
++ans;
130+
}
131+
return ans;
132+
}
133+
};
134+
```
135+
106136
### **JavaScript**
107137
108138
```js
@@ -111,12 +141,12 @@ public class Solution {
111141
* @return {number}
112142
*/
113143
var hammingWeight = function (n) {
114-
let res = 0;
144+
let ans = 0;
115145
while (n) {
116146
n &= n - 1;
117-
++res;
147+
++ans;
118148
}
119-
return res;
149+
return ans;
120150
};
121151
```
122152

solution/0100-0199/0191.Number of 1 Bits/README_EN.md

+41-11
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@
5757
```python
5858
class Solution:
5959
def hammingWeight(self, n: int) -> int:
60-
res = 0
60+
ans = 0
6161
while n:
62-
n &= (n - 1)
63-
res += 1
64-
return res
62+
n &= n - 1
63+
ans += 1
64+
return ans
6565
```
6666

6767
### **Java**
@@ -70,16 +70,46 @@ class Solution:
7070
public class Solution {
7171
// you need to treat n as an unsigned value
7272
public int hammingWeight(int n) {
73-
int res = 0;
73+
int ans = 0;
7474
while (n != 0) {
75-
n &= (n - 1);
76-
++res;
75+
n &= n - 1;
76+
++ans;
7777
}
78-
return res;
78+
return ans;
7979
}
8080
}
8181
```
8282

83+
### **C++**
84+
85+
```cpp
86+
class Solution {
87+
public:
88+
int hammingWeight(uint32_t n) {
89+
int ans = 0;
90+
while (n)
91+
{
92+
n &= n - 1;
93+
++ans;
94+
}
95+
return ans;
96+
}
97+
};
98+
```
99+
100+
### **Go**
101+
102+
```go
103+
func hammingWeight(num uint32) int {
104+
ans := 0
105+
for num != 0 {
106+
num &= num - 1
107+
ans++
108+
}
109+
return ans
110+
}
111+
```
112+
83113
### **JavaScript**
84114

85115
```js
@@ -88,12 +118,12 @@ public class Solution {
88118
* @return {number}
89119
*/
90120
var hammingWeight = function (n) {
91-
let res = 0;
121+
let ans = 0;
92122
while (n) {
93123
n &= n - 1;
94-
++res;
124+
++ans;
95125
}
96-
return res;
126+
return ans;
97127
};
98128
```
99129

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public:
3+
int hammingWeight(uint32_t n) {
4+
int ans = 0;
5+
while (n)
6+
{
7+
n &= n - 1;
8+
++ans;
9+
}
10+
return ans;
11+
}
12+
};

0 commit comments

Comments
 (0)