Skip to content

Commit 149af36

Browse files
authored
feat: update lc problems (#3435)
1 parent 6afff8c commit 149af36

File tree

14 files changed

+126
-159
lines changed

14 files changed

+126
-159
lines changed

solution/0500-0599/0552.Student Attendance Record II/README.md

+19-25
Original file line numberDiff line numberDiff line change
@@ -152,36 +152,30 @@ class Solution {
152152
#### C++
153153

154154
```cpp
155-
int f[100010][2][3];
156-
const int mod = 1e9 + 7;
157-
158155
class Solution {
159156
public:
160157
int checkRecord(int n) {
161-
this->n = n;
158+
int f[n][2][3];
162159
memset(f, -1, sizeof(f));
163-
return dfs(0, 0, 0);
164-
}
165-
166-
int dfs(int i, int j, int k) {
167-
if (i >= n) {
168-
return 1;
169-
}
170-
if (f[i][j][k] != -1) {
171-
return f[i][j][k];
172-
}
173-
int ans = dfs(i + 1, j, 0);
174-
if (j == 0) {
175-
ans = (ans + dfs(i + 1, j + 1, 0)) % mod;
176-
}
177-
if (k < 2) {
178-
ans = (ans + dfs(i + 1, j, k + 1)) % mod;
179-
}
180-
return f[i][j][k] = ans;
160+
const int mod = 1e9 + 7;
161+
auto dfs = [&](auto&& dfs, int i, int j, int k) -> int {
162+
if (i >= n) {
163+
return 1;
164+
}
165+
if (f[i][j][k] != -1) {
166+
return f[i][j][k];
167+
}
168+
int ans = dfs(dfs, i + 1, j, 0);
169+
if (j == 0) {
170+
ans = (ans + dfs(dfs, i + 1, j + 1, 0)) % mod;
171+
}
172+
if (k < 2) {
173+
ans = (ans + dfs(dfs, i + 1, j, k + 1)) % mod;
174+
}
175+
return f[i][j][k] = ans;
176+
};
177+
return dfs(dfs, 0, 0, 0);
181178
}
182-
183-
private:
184-
int n;
185179
};
186180
```
187181

solution/0500-0599/0552.Student Attendance Record II/README_EN.md

+19-25
Original file line numberDiff line numberDiff line change
@@ -134,36 +134,30 @@ class Solution {
134134
#### C++
135135

136136
```cpp
137-
int f[100010][2][3];
138-
const int mod = 1e9 + 7;
139-
140137
class Solution {
141138
public:
142139
int checkRecord(int n) {
143-
this->n = n;
140+
int f[n][2][3];
144141
memset(f, -1, sizeof(f));
145-
return dfs(0, 0, 0);
146-
}
147-
148-
int dfs(int i, int j, int k) {
149-
if (i >= n) {
150-
return 1;
151-
}
152-
if (f[i][j][k] != -1) {
153-
return f[i][j][k];
154-
}
155-
int ans = dfs(i + 1, j, 0);
156-
if (j == 0) {
157-
ans = (ans + dfs(i + 1, j + 1, 0)) % mod;
158-
}
159-
if (k < 2) {
160-
ans = (ans + dfs(i + 1, j, k + 1)) % mod;
161-
}
162-
return f[i][j][k] = ans;
142+
const int mod = 1e9 + 7;
143+
auto dfs = [&](auto&& dfs, int i, int j, int k) -> int {
144+
if (i >= n) {
145+
return 1;
146+
}
147+
if (f[i][j][k] != -1) {
148+
return f[i][j][k];
149+
}
150+
int ans = dfs(dfs, i + 1, j, 0);
151+
if (j == 0) {
152+
ans = (ans + dfs(dfs, i + 1, j + 1, 0)) % mod;
153+
}
154+
if (k < 2) {
155+
ans = (ans + dfs(dfs, i + 1, j, k + 1)) % mod;
156+
}
157+
return f[i][j][k] = ans;
158+
};
159+
return dfs(dfs, 0, 0, 0);
163160
}
164-
165-
private:
166-
int n;
167161
};
168162
```
169163
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
1-
int f[100010][2][3];
2-
const int mod = 1e9 + 7;
3-
41
class Solution {
52
public:
63
int checkRecord(int n) {
7-
this->n = n;
4+
int f[n][2][3];
85
memset(f, -1, sizeof(f));
9-
return dfs(0, 0, 0);
6+
const int mod = 1e9 + 7;
7+
auto dfs = [&](auto&& dfs, int i, int j, int k) -> int {
8+
if (i >= n) {
9+
return 1;
10+
}
11+
if (f[i][j][k] != -1) {
12+
return f[i][j][k];
13+
}
14+
int ans = dfs(dfs, i + 1, j, 0);
15+
if (j == 0) {
16+
ans = (ans + dfs(dfs, i + 1, j + 1, 0)) % mod;
17+
}
18+
if (k < 2) {
19+
ans = (ans + dfs(dfs, i + 1, j, k + 1)) % mod;
20+
}
21+
return f[i][j][k] = ans;
22+
};
23+
return dfs(dfs, 0, 0, 0);
1024
}
11-
12-
int dfs(int i, int j, int k) {
13-
if (i >= n) {
14-
return 1;
15-
}
16-
if (f[i][j][k] != -1) {
17-
return f[i][j][k];
18-
}
19-
int ans = dfs(i + 1, j, 0);
20-
if (j == 0) {
21-
ans = (ans + dfs(i + 1, j + 1, 0)) % mod;
22-
}
23-
if (k < 2) {
24-
ans = (ans + dfs(i + 1, j, k + 1)) % mod;
25-
}
26-
return f[i][j][k] = ans;
27-
}
28-
29-
private:
30-
int n;
31-
};
25+
};

solution/0700-0799/0756.Pyramid Transition Matrix/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ tags:
4040
<strong>输入:</strong>bottom = "BCD", allowed = ["BCC","CDE","CEA","FFF"]
4141
<strong>输出:</strong>true
4242
<strong>解释:</strong>允许的三角形模式显示在右边。
43-
从最底层(第3层)开始,我们可以在第2层构建“CE”,然后在第1层构建“E”。
44-
金字塔中有三种三角形图案,分别是“BCC”、“CDE”“CEA”。都是允许的。
43+
从最底层(第 3 层)开始,我们可以在第 2 层构建“CE”,然后在第 1 层构建“E”。
44+
金字塔中有三种三角形图案,分别是 “BCC”、“CDE”“CEA”。都是允许的。
4545
</pre>
4646

4747
<p><strong>示例 2:</strong></p>
@@ -52,7 +52,7 @@ tags:
5252
<strong>输入:</strong>bottom = "AAAA", allowed = ["AAB","AAC","BCD","BBE","DEF"]
5353
<strong>输出:</strong>false
5454
<strong>解释:</strong>允许的三角形模式显示在右边。
55-
从最底层(游戏邦注:即第4个关卡)开始,创造第3个关卡有多种方法,但如果尝试所有可能性,你便会在创造第1个关卡前陷入困境
55+
从最底层(游戏邦注:即第 4 个关卡)开始,创造第 3 个关卡有多种方法,但如果尝试所有可能性,你便会在创造第 1 个关卡前陷入困境
5656
</pre>
5757

5858
<p>&nbsp;</p>
@@ -63,7 +63,7 @@ tags:
6363
<li><code>2 &lt;= bottom.length &lt;= 6</code></li>
6464
<li><code>0 &lt;= allowed.length &lt;= 216</code></li>
6565
<li><code>allowed[i].length == 3</code></li>
66-
<li>所有输入字符串中的字母来自集合&nbsp;<code>{'A', 'B', 'C', 'D', 'E', 'F', 'G'}</code>。</li>
66+
<li>所有输入字符串中的字母来自集合&nbsp;<code>{'A', 'B', 'C', 'D', 'E', 'F'}</code>。</li>
6767
<li>&nbsp;<code>allowed</code>&nbsp;中所有值都是 <strong>唯一的</strong></li>
6868
</ul>
6969

solution/2000-2099/2096.Step-By-Step Directions From a Binary Tree Node to Another/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ function getDirections(root: TreeNode | null, startValue: number, destValue: num
314314
const left = lca(node.left, p, q);
315315
const right = lca(node.right, p, q);
316316

317-
return left && right ? node : left ?? right;
317+
return left && right ? node : (left ?? right);
318318
};
319319

320320
const dfs = (node: TreeNode | null, x: number, path: string[]): boolean => {
@@ -370,7 +370,7 @@ var getDirections = function (root, startValue, destValue) {
370370
const left = lca(node.left, p, q);
371371
const right = lca(node.right, p, q);
372372

373-
return left && right ? node : left ?? right;
373+
return left && right ? node : (left ?? right);
374374
};
375375

376376
const dfs = (node, x, path) => {

solution/2000-2099/2096.Step-By-Step Directions From a Binary Tree Node to Another/README_EN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ function getDirections(root: TreeNode | null, startValue: number, destValue: num
310310
const left = lca(node.left, p, q);
311311
const right = lca(node.right, p, q);
312312

313-
return left && right ? node : left ?? right;
313+
return left && right ? node : (left ?? right);
314314
};
315315

316316
const dfs = (node: TreeNode | null, x: number, path: string[]): boolean => {
@@ -366,7 +366,7 @@ var getDirections = function (root, startValue, destValue) {
366366
const left = lca(node.left, p, q);
367367
const right = lca(node.right, p, q);
368368

369-
return left && right ? node : left ?? right;
369+
return left && right ? node : (left ?? right);
370370
};
371371

372372
const dfs = (node, x, path) => {

solution/2000-2099/2096.Step-By-Step Directions From a Binary Tree Node to Another/Solution.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var getDirections = function (root, startValue, destValue) {
2020
const left = lca(node.left, p, q);
2121
const right = lca(node.right, p, q);
2222

23-
return left && right ? node : left ?? right;
23+
return left && right ? node : (left ?? right);
2424
};
2525

2626
const dfs = (node, x, path) => {

solution/2000-2099/2096.Step-By-Step Directions From a Binary Tree Node to Another/Solution.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function getDirections(root: TreeNode | null, startValue: number, destValue: num
2020
const left = lca(node.left, p, q);
2121
const right = lca(node.right, p, q);
2222

23-
return left && right ? node : left ?? right;
23+
return left && right ? node : (left ?? right);
2424
};
2525

2626
const dfs = (node: TreeNode | null, x: number, path: string[]): boolean => {

solution/3100-3199/3154.Find Number of Ways to Reach the K-th Stair/README.md

+18-23
Original file line numberDiff line numberDiff line change
@@ -187,29 +187,24 @@ class Solution {
187187
class Solution {
188188
public:
189189
int waysToReachStair(int k) {
190-
this->k = k;
191-
return dfs(1, 0, 0);
192-
}
193-
194-
private:
195-
unordered_map<long long, int> f;
196-
int k;
197-
198-
int dfs(int i, int j, int jump) {
199-
if (i > k + 1) {
200-
return 0;
201-
}
202-
long long key = ((long long) i << 32) | jump << 1 | j;
203-
if (f.contains(key)) {
204-
return f[key];
205-
}
206-
int ans = i == k ? 1 : 0;
207-
if (i > 0 && j == 0) {
208-
ans += dfs(i - 1, 1, jump);
209-
}
210-
ans += dfs(i + (1 << jump), 0, jump + 1);
211-
f[key] = ans;
212-
return ans;
190+
unordered_map<long long, int> f;
191+
auto dfs = [&](auto&& dfs, int i, int j, int jump) -> int {
192+
if (i > k + 1) {
193+
return 0;
194+
}
195+
long long key = ((long long) i << 32) | jump << 1 | j;
196+
if (f.contains(key)) {
197+
return f[key];
198+
}
199+
int ans = i == k ? 1 : 0;
200+
if (i > 0 && j == 0) {
201+
ans += dfs(dfs, i - 1, 1, jump);
202+
}
203+
ans += dfs(dfs, i + (1 << jump), 0, jump + 1);
204+
f[key] = ans;
205+
return ans;
206+
};
207+
return dfs(dfs, 1, 0, 0);
213208
}
214209
};
215210
```

solution/3100-3199/3154.Find Number of Ways to Reach the K-th Stair/README_EN.md

+18-23
Original file line numberDiff line numberDiff line change
@@ -185,29 +185,24 @@ class Solution {
185185
class Solution {
186186
public:
187187
int waysToReachStair(int k) {
188-
this->k = k;
189-
return dfs(1, 0, 0);
190-
}
191-
192-
private:
193-
unordered_map<long long, int> f;
194-
int k;
195-
196-
int dfs(int i, int j, int jump) {
197-
if (i > k + 1) {
198-
return 0;
199-
}
200-
long long key = ((long long) i << 32) | jump << 1 | j;
201-
if (f.contains(key)) {
202-
return f[key];
203-
}
204-
int ans = i == k ? 1 : 0;
205-
if (i > 0 && j == 0) {
206-
ans += dfs(i - 1, 1, jump);
207-
}
208-
ans += dfs(i + (1 << jump), 0, jump + 1);
209-
f[key] = ans;
210-
return ans;
188+
unordered_map<long long, int> f;
189+
auto dfs = [&](auto&& dfs, int i, int j, int jump) -> int {
190+
if (i > k + 1) {
191+
return 0;
192+
}
193+
long long key = ((long long) i << 32) | jump << 1 | j;
194+
if (f.contains(key)) {
195+
return f[key];
196+
}
197+
int ans = i == k ? 1 : 0;
198+
if (i > 0 && j == 0) {
199+
ans += dfs(dfs, i - 1, 1, jump);
200+
}
201+
ans += dfs(dfs, i + (1 << jump), 0, jump + 1);
202+
f[key] = ans;
203+
return ans;
204+
};
205+
return dfs(dfs, 1, 0, 0);
211206
}
212207
};
213208
```
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
class Solution {
22
public:
33
int waysToReachStair(int k) {
4-
this->k = k;
5-
return dfs(1, 0, 0);
4+
unordered_map<long long, int> f;
5+
auto dfs = [&](auto&& dfs, int i, int j, int jump) -> int {
6+
if (i > k + 1) {
7+
return 0;
8+
}
9+
long long key = ((long long) i << 32) | jump << 1 | j;
10+
if (f.contains(key)) {
11+
return f[key];
12+
}
13+
int ans = i == k ? 1 : 0;
14+
if (i > 0 && j == 0) {
15+
ans += dfs(dfs, i - 1, 1, jump);
16+
}
17+
ans += dfs(dfs, i + (1 << jump), 0, jump + 1);
18+
f[key] = ans;
19+
return ans;
20+
};
21+
return dfs(dfs, 1, 0, 0);
622
}
7-
8-
private:
9-
unordered_map<long long, int> f;
10-
int k;
11-
12-
int dfs(int i, int j, int jump) {
13-
if (i > k + 1) {
14-
return 0;
15-
}
16-
long long key = ((long long) i << 32) | jump << 1 | j;
17-
if (f.contains(key)) {
18-
return f[key];
19-
}
20-
int ans = i == k ? 1 : 0;
21-
if (i > 0 && j == 0) {
22-
ans += dfs(i - 1, 1, jump);
23-
}
24-
ans += dfs(i + (1 << jump), 0, jump + 1);
25-
f[key] = ans;
26-
return ans;
27-
}
28-
};
23+
};

0 commit comments

Comments
 (0)