Skip to content

Commit 5a60272

Browse files
committed
feat: add solutions to lc problems: No.0551,0552
* No.0551.Student Attendance Record I * No.0552.Student Attendance Record II
1 parent 23ef6c2 commit 5a60272

File tree

10 files changed

+460
-2
lines changed

10 files changed

+460
-2
lines changed

solution/0500-0599/0551.Student Attendance Record I/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,26 @@ class Solution {
5959
}
6060
```
6161

62+
### **Go**
63+
64+
```go
65+
func checkRecord(s string) bool {
66+
return strings.Count(s, "A") < 2 && !strings.Contains(s, "LLL")
67+
}
68+
```
69+
70+
### **C++**
71+
72+
```cpp
73+
class Solution {
74+
public:
75+
bool checkRecord(string s) {
76+
return count(s.begin(), s.end(), 'A') < 2 &&
77+
s.find("LLL") == string::npos;
78+
}
79+
};
80+
```
81+
6282
### **...**
6383
6484
```

solution/0500-0599/0551.Student Attendance Record I/README_EN.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,26 @@ class Solution {
6969
}
7070
```
7171

72+
### **Go**
73+
74+
```go
75+
func checkRecord(s string) bool {
76+
return strings.Count(s, "A") < 2 && !strings.Contains(s, "LLL")
77+
}
78+
```
79+
80+
### **C++**
81+
82+
```cpp
83+
class Solution {
84+
public:
85+
bool checkRecord(string s) {
86+
return count(s.begin(), s.end(), 'A') < 2 &&
87+
s.find("LLL") == string::npos;
88+
}
89+
};
90+
```
91+
7292
### **...**
7393
7494
```
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Solution {
2+
public:
3+
bool checkRecord(string s) {
4+
return count(s.begin(), s.end(), 'A') < 2 &&
5+
s.find("LLL") == string::npos;
6+
}
7+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
func checkRecord(s string) bool {
2+
return strings.Count(s, "A") < 2 && !strings.Contains(s, "LLL")
3+
}

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

Lines changed: 145 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,166 @@
3434

3535
<!-- 这里可写通用的实现逻辑 -->
3636

37+
动态规划,定义 `dp[i][j][k]` 表示前 `i` 天,缺勤 `j` 次,连续迟到 `k` 次时,可获得出勤奖励的情况数量
38+
39+
状态转移需要对第 `i` 天的出勤情况分别讨论:
40+
41+
- 缺勤:之前不能有任何缺勤记录,即 `j == 0`
42+
- 迟到:之前最多连续迟到 1 次,即 `k == 0 || k == 1`
43+
- 到场:无限制
44+
3745
<!-- tabs:start -->
3846

3947
### **Python3**
4048

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

4351
```python
44-
52+
class Solution:
53+
def checkRecord(self, n: int) -> int:
54+
mod = int(1e9 + 7)
55+
dp = [[[0, 0, 0], [0, 0, 0]] for _ in range(n)]
56+
57+
# base case
58+
dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = 1
59+
60+
for i in range(1, n):
61+
# A
62+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % mod
63+
# L
64+
dp[i][0][1] = dp[i - 1][0][0]
65+
dp[i][0][2] = dp[i - 1][0][1]
66+
dp[i][1][1] = dp[i - 1][1][0]
67+
dp[i][1][2] = dp[i - 1][1][1]
68+
# P
69+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % mod
70+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % mod
71+
72+
ans = 0
73+
for j in range(2):
74+
for k in range(3):
75+
ans = (ans + dp[n - 1][j][k]) % mod
76+
return ans
4577
```
4678

4779
### **Java**
4880

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

5183
```java
84+
class Solution {
85+
private static final int MOD = 1000000007;
86+
87+
public int checkRecord(int n) {
88+
long[][][] dp = new long[n][2][3];
89+
90+
// base case
91+
dp[0][0][0] = 1;
92+
dp[0][0][1] = 1;
93+
dp[0][1][0] = 1;
94+
95+
for (int i = 1; i < n; i++) {
96+
// A
97+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
98+
// L
99+
dp[i][0][1] = dp[i - 1][0][0];
100+
dp[i][0][2] = dp[i - 1][0][1];
101+
dp[i][1][1] = dp[i - 1][1][0];
102+
dp[i][1][2] = dp[i - 1][1][1];
103+
// P
104+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
105+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % MOD;
106+
}
107+
108+
long ans = 0;
109+
for (int j = 0; j < 2; j++) {
110+
for (int k = 0; k < 3; k++) {
111+
ans = (ans + dp[n - 1][j][k]) % MOD;
112+
}
113+
}
114+
return (int) ans;
115+
}
116+
}
117+
```
118+
119+
### **Go**
120+
121+
```go
122+
const _mod int = 1e9 + 7
123+
124+
func checkRecord(n int) int {
125+
dp := make([][][]int, n)
126+
for i := 0; i < n; i++ {
127+
dp[i] = make([][]int, 2)
128+
for j := 0; j < 2; j++ {
129+
dp[i][j] = make([]int, 3)
130+
}
131+
}
132+
133+
// base case
134+
dp[0][0][0] = 1
135+
dp[0][0][1] = 1
136+
dp[0][1][0] = 1
137+
138+
for i := 1; i < n; i++ {
139+
// A
140+
dp[i][1][0] = (dp[i-1][0][0] + dp[i-1][0][1] + dp[i-1][0][2]) % _mod
141+
// L
142+
dp[i][0][1] = dp[i-1][0][0]
143+
dp[i][0][2] = dp[i-1][0][1]
144+
dp[i][1][1] = dp[i-1][1][0]
145+
dp[i][1][2] = dp[i-1][1][1]
146+
// P
147+
dp[i][0][0] = (dp[i-1][0][0] + dp[i-1][0][1] + dp[i-1][0][2]) % _mod
148+
dp[i][1][0] = (dp[i][1][0] + dp[i-1][1][0] + dp[i-1][1][1] + dp[i-1][1][2]) % _mod
149+
}
150+
151+
var ans int
152+
for j := 0; j < 2; j++ {
153+
for k := 0; k < 3; k++ {
154+
ans = (ans + dp[n-1][j][k]) % _mod
155+
}
156+
}
157+
return ans
158+
}
159+
```
52160

161+
### **C++**
162+
163+
```cpp
164+
constexpr int MOD = 1e9 + 7;
165+
166+
class Solution {
167+
public:
168+
int checkRecord(int n) {
169+
using ll = long long;
170+
vector<vector<vector<ll>>> dp(n, vector<vector<ll>>(2, vector<ll>(3)));
171+
172+
// base case
173+
dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = 1;
174+
175+
for (int i = 1; i < n; ++i) {
176+
// A
177+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
178+
// L
179+
dp[i][0][1] = dp[i - 1][0][0];
180+
dp[i][0][2] = dp[i - 1][0][1];
181+
dp[i][1][1] = dp[i - 1][1][0];
182+
dp[i][1][2] = dp[i - 1][1][1];
183+
// P
184+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
185+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % MOD;
186+
}
187+
188+
ll ans = 0;
189+
for (int j = 0; j < 2; ++j) {
190+
for (int k = 0; k < 3; ++k) {
191+
ans = (ans + dp[n - 1][j][k]) % MOD;
192+
}
193+
}
194+
return ans;
195+
}
196+
};
53197
```
54198

55199
### **...**

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

Lines changed: 137 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,149 @@ Only &quot;AA&quot; is not eligible because there are 2 absences (there need to
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def checkRecord(self, n: int) -> int:
65+
mod = int(1e9 + 7)
66+
dp = [[[0, 0, 0], [0, 0, 0]] for _ in range(n)]
67+
68+
# base case
69+
dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = 1
70+
71+
for i in range(1, n):
72+
# A
73+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % mod
74+
# L
75+
dp[i][0][1] = dp[i - 1][0][0]
76+
dp[i][0][2] = dp[i - 1][0][1]
77+
dp[i][1][1] = dp[i - 1][1][0]
78+
dp[i][1][2] = dp[i - 1][1][1]
79+
# P
80+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % mod
81+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % mod
82+
83+
ans = 0
84+
for j in range(2):
85+
for k in range(3):
86+
ans = (ans + dp[n - 1][j][k]) % mod
87+
return ans
6488
```
6589

6690
### **Java**
6791

6892
```java
93+
class Solution {
94+
private static final int MOD = 1000000007;
95+
96+
public int checkRecord(int n) {
97+
long[][][] dp = new long[n][2][3];
98+
99+
// base case
100+
dp[0][0][0] = 1;
101+
dp[0][0][1] = 1;
102+
dp[0][1][0] = 1;
103+
104+
for (int i = 1; i < n; i++) {
105+
// A
106+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
107+
// L
108+
dp[i][0][1] = dp[i - 1][0][0];
109+
dp[i][0][2] = dp[i - 1][0][1];
110+
dp[i][1][1] = dp[i - 1][1][0];
111+
dp[i][1][2] = dp[i - 1][1][1];
112+
// P
113+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
114+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % MOD;
115+
}
116+
117+
long ans = 0;
118+
for (int j = 0; j < 2; j++) {
119+
for (int k = 0; k < 3; k++) {
120+
ans = (ans + dp[n - 1][j][k]) % MOD;
121+
}
122+
}
123+
return (int) ans;
124+
}
125+
}
126+
```
127+
128+
### **Go**
129+
130+
```go
131+
const _mod int = 1e9 + 7
132+
133+
func checkRecord(n int) int {
134+
dp := make([][][]int, n)
135+
for i := 0; i < n; i++ {
136+
dp[i] = make([][]int, 2)
137+
for j := 0; j < 2; j++ {
138+
dp[i][j] = make([]int, 3)
139+
}
140+
}
141+
142+
// base case
143+
dp[0][0][0] = 1
144+
dp[0][0][1] = 1
145+
dp[0][1][0] = 1
146+
147+
for i := 1; i < n; i++ {
148+
// A
149+
dp[i][1][0] = (dp[i-1][0][0] + dp[i-1][0][1] + dp[i-1][0][2]) % _mod
150+
// L
151+
dp[i][0][1] = dp[i-1][0][0]
152+
dp[i][0][2] = dp[i-1][0][1]
153+
dp[i][1][1] = dp[i-1][1][0]
154+
dp[i][1][2] = dp[i-1][1][1]
155+
// P
156+
dp[i][0][0] = (dp[i-1][0][0] + dp[i-1][0][1] + dp[i-1][0][2]) % _mod
157+
dp[i][1][0] = (dp[i][1][0] + dp[i-1][1][0] + dp[i-1][1][1] + dp[i-1][1][2]) % _mod
158+
}
159+
160+
var ans int
161+
for j := 0; j < 2; j++ {
162+
for k := 0; k < 3; k++ {
163+
ans = (ans + dp[n-1][j][k]) % _mod
164+
}
165+
}
166+
return ans
167+
}
168+
```
69169

170+
### **C++**
171+
172+
```cpp
173+
constexpr int MOD = 1e9 + 7;
174+
175+
class Solution {
176+
public:
177+
int checkRecord(int n) {
178+
using ll = long long;
179+
vector<vector<vector<ll>>> dp(n, vector<vector<ll>>(2, vector<ll>(3)));
180+
181+
// base case
182+
dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = 1;
183+
184+
for (int i = 1; i < n; ++i) {
185+
// A
186+
dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
187+
// L
188+
dp[i][0][1] = dp[i - 1][0][0];
189+
dp[i][0][2] = dp[i - 1][0][1];
190+
dp[i][1][1] = dp[i - 1][1][0];
191+
dp[i][1][2] = dp[i - 1][1][1];
192+
// P
193+
dp[i][0][0] = (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2]) % MOD;
194+
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2]) % MOD;
195+
}
196+
197+
ll ans = 0;
198+
for (int j = 0; j < 2; ++j) {
199+
for (int k = 0; k < 3; ++k) {
200+
ans = (ans + dp[n - 1][j][k]) % MOD;
201+
}
202+
}
203+
return ans;
204+
}
205+
};
70206
```
71207

72208
### **...**

0 commit comments

Comments
 (0)