Skip to content

Commit b6f24c3

Browse files
committed
feat: add solutions to lc problems: No.0089,0137,0717
* No.0089.Gray Code * No.0137.Single Number II * No.0717.1-bit and 2-bit Characters
1 parent 5a20be2 commit b6f24c3

File tree

23 files changed

+472
-111
lines changed

23 files changed

+472
-111
lines changed

lcof2/剑指 Offer II 004. 只出现一次的数字/README.md

+14-18
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
<!-- 这里可写通用的实现逻辑 -->
4646

47-
统计所有数字每个位中 1 出现的次数,对于某个位,1 出现的次数一定是 3 的倍数 +1 或 0。对这个数 %3 得到的结果就是那个出现一次的数字在该位上的值
47+
统计所有数字每个位中 1 出现的次数,对于某个位,1 出现的次数一定是 3 的倍数 +1 或 0。对这个数 %3 得到的结果就是那个出现一次的数字在该位上的值
4848

4949
<!-- tabs:start -->
5050

@@ -56,7 +56,7 @@
5656
class Solution:
5757
def singleNumber(self, nums: List[int]) -> int:
5858
ans = 0
59-
for i in range(0, 32):
59+
for i in range(32):
6060
cnt = sum(num >> i & 1 for num in nums)
6161
if cnt % 3:
6262
if i == 31:
@@ -109,26 +109,22 @@ func singleNumber(nums []int) int {
109109
### **C++**
110110

111111
```cpp
112-
class Solution
113-
{
114-
public:
115-
int singleNumber( vector<int> & nums )
112+
class Solution {
113+
public:
114+
int singleNumber(vector<int>& nums) {
115+
int ans = 0;
116+
for (int i = 0; i < 32; ++i)
116117
{
117-
int ans = 0;
118-
for ( int i = 0; i < 32; i++ )
118+
int cnt = 0;
119+
for (int num : nums)
119120
{
120-
int cnt = 0;
121-
for ( int j = 0; j < nums.size(); j++ )
122-
{
123-
cnt += ((nums[j] >> i) & 1);
124-
}
125-
126-
cnt %= 3;
127-
ans |= (cnt << i);
121+
cnt += ((num >> i) & 1);
128122
}
129-
130-
return(ans);
123+
cnt %= 3;
124+
ans |= cnt << i;
131125
}
126+
return ans;
127+
}
132128
};
133129
```
134130
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
1-
class Solution
2-
{
3-
public:
4-
int singleNumber( vector<int> & nums )
1+
class Solution {
2+
public:
3+
int singleNumber(vector<int>& nums) {
4+
int ans = 0;
5+
for (int i = 0; i < 32; ++i)
56
{
6-
int ans = 0;
7-
for ( int i = 0; i < 32; i++ )
7+
int cnt = 0;
8+
for (int num : nums)
89
{
9-
int cnt = 0;
10-
for ( int j = 0; j < nums.size(); j++ )
11-
{
12-
cnt += ((nums[j] >> i) & 1);
13-
}
14-
15-
cnt %= 3;
16-
ans |= (cnt << i);
10+
cnt += ((num >> i) & 1);
1711
}
18-
19-
return(ans);
12+
cnt %= 3;
13+
ans |= cnt << i;
2014
}
15+
return ans;
16+
}
2117
};

lcof2/剑指 Offer II 004. 只出现一次的数字/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution:
22
def singleNumber(self, nums: List[int]) -> int:
33
ans = 0
4-
for i in range(0, 32):
4+
for i in range(32):
55
cnt = sum(num >> i & 1 for num in nums)
66
if cnt % 3:
77
if i == 31:

solution/0000-0099/0089.Gray Code/README.md

+54-1
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,75 @@
4545

4646
<!-- 这里可写通用的实现逻辑 -->
4747

48+
`G(i) = i ^ (i/2)`
49+
4850
<!-- tabs:start -->
4951

5052
### **Python3**
5153

5254
<!-- 这里可写当前语言的特殊实现逻辑 -->
5355

5456
```python
55-
57+
class Solution:
58+
def grayCode(self, n: int) -> List[int]:
59+
return [i ^ (i >> 1) for i in range(1 << n)]
5660
```
5761

5862
### **Java**
5963

6064
<!-- 这里可写当前语言的特殊实现逻辑 -->
6165

6266
```java
67+
class Solution {
68+
public List<Integer> grayCode(int n) {
69+
List<Integer> ans = new ArrayList<>();
70+
for (int i = 0; i < 1 << n; ++i) {
71+
ans.add(i ^ (i >> 1));
72+
}
73+
return ans;
74+
}
75+
}
76+
```
77+
78+
### **C++**
79+
80+
```cpp
81+
class Solution {
82+
public:
83+
vector<int> grayCode(int n) {
84+
vector<int> ans;
85+
for (int i = 0; i < 1 << n; ++i) ans.push_back(i ^ (i >> 1));
86+
return ans;
87+
}
88+
};
89+
```
90+
91+
### **Go**
92+
93+
```go
94+
func grayCode(n int) []int {
95+
var ans []int
96+
for i := 0; i < 1<<n; i++ {
97+
ans = append(ans, i^(i>>1))
98+
}
99+
return ans
100+
}
101+
```
63102

103+
### **JavaScript**
104+
105+
```js
106+
/**
107+
* @param {number} n
108+
* @return {number[]}
109+
*/
110+
var grayCode = function (n) {
111+
let ans = [];
112+
for (let i = 0; i < 1 << n; ++i) {
113+
ans.push(i ^ (i >> 1));
114+
}
115+
return ans;
116+
};
64117
```
65118

66119
### **...**

solution/0000-0099/0089.Gray Code/README_EN.md

+54-1
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,71 @@
4444

4545
## Solutions
4646

47+
`G(i) = i ^ (i/2)`.
48+
4749
<!-- tabs:start -->
4850

4951
### **Python3**
5052

5153
```python
52-
54+
class Solution:
55+
def grayCode(self, n: int) -> List[int]:
56+
return [i ^ (i >> 1) for i in range(1 << n)]
5357
```
5458

5559
### **Java**
5660

5761
```java
62+
class Solution {
63+
public List<Integer> grayCode(int n) {
64+
List<Integer> ans = new ArrayList<>();
65+
for (int i = 0; i < 1 << n; ++i) {
66+
ans.add(i ^ (i >> 1));
67+
}
68+
return ans;
69+
}
70+
}
71+
```
72+
73+
### **C++**
74+
75+
```cpp
76+
class Solution {
77+
public:
78+
vector<int> grayCode(int n) {
79+
vector<int> ans;
80+
for (int i = 0; i < 1 << n; ++i) ans.push_back(i ^ (i >> 1));
81+
return ans;
82+
}
83+
};
84+
```
85+
86+
### **Go**
87+
88+
```go
89+
func grayCode(n int) []int {
90+
var ans []int
91+
for i := 0; i < 1<<n; i++ {
92+
ans = append(ans, i^(i>>1))
93+
}
94+
return ans
95+
}
96+
```
5897

98+
### **JavaScript**
99+
100+
```js
101+
/**
102+
* @param {number} n
103+
* @return {number[]}
104+
*/
105+
var grayCode = function (n) {
106+
let ans = [];
107+
for (let i = 0; i < 1 << n; ++i) {
108+
ans.push(i ^ (i >> 1));
109+
}
110+
return ans;
111+
};
59112
```
60113

61114
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
class Solution {
22
public:
33
vector<int> grayCode(int n) {
4-
vector<int> res;
5-
for (int i = 0; i < (1 << n); ++i) {
6-
res.push_back((i >> 1) ^ i);
7-
}
8-
return res;
4+
vector<int> ans;
5+
for (int i = 0; i < 1 << n; ++i) ans.push_back(i ^ (i >> 1));
6+
return ans;
97
}
108
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
func grayCode(n int) []int {
2+
var ans []int
3+
for i := 0; i < 1<<n; i++ {
4+
ans = append(ans, i^(i>>1))
5+
}
6+
return ans
7+
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
class Solution {
22
public List<Integer> grayCode(int n) {
3-
List<Integer> re = new ArrayList<>();
4-
for (int i = 0; i < (1 << n); i++) re.add(i ^ (i >> 1));
5-
return re;
3+
List<Integer> ans = new ArrayList<>();
4+
for (int i = 0; i < 1 << n; ++i) {
5+
ans.add(i ^ (i >> 1));
6+
}
7+
return ans;
68
}
79
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**
2+
* @param {number} n
3+
* @return {number[]}
4+
*/
5+
var grayCode = function (n) {
6+
let ans = [];
7+
for (let i = 0; i < 1 << n; ++i) {
8+
ans.push(i ^ (i >> 1));
9+
}
10+
return ans;
11+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Solution:
2+
def grayCode(self, n: int) -> List[int]:
3+
return [i ^ (i >> 1) for i in range(1 << n)]

0 commit comments

Comments
 (0)