Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5a60272

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /