Skip to content

Commit 5e4d84a

Browse files
committed
feat: add solutions to lc problem: No.1411
No.1411.Number of Ways to Paint N \303\227 3 Grid
1 parent 2fe7bf2 commit 5e4d84a

File tree

6 files changed

+179
-2
lines changed

6 files changed

+179
-2
lines changed

solution/1400-1499/1411.Number of Ways to Paint N × 3 Grid/README.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,91 @@
6060

6161
<!-- 这里可写通用的实现逻辑 -->
6262

63+
**方法一:递推**
64+
65+
把每一行所有可能的状态进行分类。根据对称性原理,当一行只有 $3$ 个元素时,所有合法状态分类为:$010$ 型, $012$ 型。
66+
67+
- 当状态为 $010$ 型时:下一行可能的状态为:$101$, $102$, $121$, $201$, $202$。这 $5$ 个状态可归纳为 $3$ 个 $010$ 型,$2$ 个 $012$ 型。
68+
- 当状态为 $012$ 型时:下一行可能的状态为:$101$, $120$, $121$, $201$。这 $4$ 个状态可归纳为 $2$ 个 $010$ 型,$2$ 个 $012$ 型。
69+
70+
综上所述,可以得到:$newf0 = 3 * f0 + 2 * f1$,$newf1 = 2 * f0 + 2 * f1$。
71+
72+
时间复杂度 $O(n)$。
73+
6374
<!-- tabs:start -->
6475

6576
### **Python3**
6677

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

6980
```python
70-
81+
class Solution:
82+
def numOfWays(self, n: int) -> int:
83+
mod = 10**9 + 7
84+
f0 = f1 = 6
85+
for _ in range(n - 1):
86+
g0 = (3 * f0 + 2 * f1) % mod
87+
g1 = (2 * f0 + 2 * f1) % mod
88+
f0, f1 = g0, g1
89+
return (f0 + f1) % mod
7190
```
7291

7392
### **Java**
7493

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

7796
```java
97+
class Solution {
98+
public int numOfWays(int n) {
99+
int mod = (int) 1e9 + 7;
100+
long f0 = 6, f1 = 6;
101+
for (int i = 0; i < n - 1; ++i) {
102+
long g0 = (3 * f0 + 2 * f1) % mod;
103+
long g1 = (2 * f0 + 2 * f1) % mod;
104+
f0 = g0;
105+
f1 = g1;
106+
}
107+
return (int) (f0 + f1) % mod;
108+
}
109+
}
110+
```
111+
112+
### **C++**
113+
114+
```cpp
115+
using ll = long long;
116+
117+
class Solution {
118+
public:
119+
int numOfWays(int n) {
120+
int mod = 1e9 + 7;
121+
ll f0 = 6, f1 = 6;
122+
while (--n)
123+
{
124+
ll g0 = (f0 * 3 + f1 * 2) % mod;
125+
ll g1 = (f0 * 2 + f1 * 2) % mod;
126+
f0 = g0;
127+
f1 = g1;
128+
}
129+
return (int) (f0 + f1) % mod;
130+
}
131+
};
132+
```
78133
134+
### **Go**
135+
136+
```go
137+
func numOfWays(n int) int {
138+
mod := int(1e9) + 7
139+
f0, f1 := 6, 6
140+
for n > 1 {
141+
n--
142+
g0 := (f0*3 + f1*2) % mod
143+
g1 := (f0*2 + f1*2) % mod
144+
f0, f1 = g0, g1
145+
}
146+
return (f0 + f1) % mod
147+
}
79148
```
80149

81150
### **...**

solution/1400-1499/1411.Number of Ways to Paint N × 3 Grid/README_EN.md

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,71 @@
3939
### **Python3**
4040

4141
```python
42-
42+
class Solution:
43+
def numOfWays(self, n: int) -> int:
44+
mod = 10**9 + 7
45+
f0 = f1 = 6
46+
for _ in range(n - 1):
47+
g0 = (3 * f0 + 2 * f1) % mod
48+
g1 = (2 * f0 + 2 * f1) % mod
49+
f0, f1 = g0, g1
50+
return (f0 + f1) % mod
4351
```
4452

4553
### **Java**
4654

4755
```java
56+
class Solution {
57+
public int numOfWays(int n) {
58+
int mod = (int) 1e9 + 7;
59+
long f0 = 6, f1 = 6;
60+
for (int i = 0; i < n - 1; ++i) {
61+
long g0 = (3 * f0 + 2 * f1) % mod;
62+
long g1 = (2 * f0 + 2 * f1) % mod;
63+
f0 = g0;
64+
f1 = g1;
65+
}
66+
return (int) (f0 + f1) % mod;
67+
}
68+
}
69+
```
70+
71+
### **C++**
72+
73+
```cpp
74+
using ll = long long;
75+
76+
class Solution {
77+
public:
78+
int numOfWays(int n) {
79+
int mod = 1e9 + 7;
80+
ll f0 = 6, f1 = 6;
81+
while (--n)
82+
{
83+
ll g0 = (f0 * 3 + f1 * 2) % mod;
84+
ll g1 = (f0 * 2 + f1 * 2) % mod;
85+
f0 = g0;
86+
f1 = g1;
87+
}
88+
return (int) (f0 + f1) % mod;
89+
}
90+
};
91+
```
4892
93+
### **Go**
94+
95+
```go
96+
func numOfWays(n int) int {
97+
mod := int(1e9) + 7
98+
f0, f1 := 6, 6
99+
for n > 1 {
100+
n--
101+
g0 := (f0*3 + f1*2) % mod
102+
g1 := (f0*2 + f1*2) % mod
103+
f0, f1 = g0, g1
104+
}
105+
return (f0 + f1) % mod
106+
}
49107
```
50108

51109
### **...**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using ll = long long;
2+
3+
class Solution {
4+
public:
5+
int numOfWays(int n) {
6+
int mod = 1e9 + 7;
7+
ll f0 = 6, f1 = 6;
8+
while (--n)
9+
{
10+
ll g0 = (f0 * 3 + f1 * 2) % mod;
11+
ll g1 = (f0 * 2 + f1 * 2) % mod;
12+
f0 = g0;
13+
f1 = g1;
14+
}
15+
return (int) (f0 + f1) % mod;
16+
}
17+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func numOfWays(n int) int {
2+
mod := int(1e9) + 7
3+
f0, f1 := 6, 6
4+
for n > 1 {
5+
n--
6+
g0 := (f0*3 + f1*2) % mod
7+
g1 := (f0*2 + f1*2) % mod
8+
f0, f1 = g0, g1
9+
}
10+
return (f0 + f1) % mod
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public int numOfWays(int n) {
3+
int mod = (int) 1e9 + 7;
4+
long f0 = 6, f1 = 6;
5+
for (int i = 0; i < n - 1; ++i) {
6+
long g0 = (3 * f0 + 2 * f1) % mod;
7+
long g1 = (2 * f0 + 2 * f1) % mod;
8+
f0 = g0;
9+
f1 = g1;
10+
}
11+
return (int) (f0 + f1) % mod;
12+
}
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def numOfWays(self, n: int) -> int:
3+
mod = 10**9 + 7
4+
f0 = f1 = 6
5+
for _ in range(n - 1):
6+
g0 = (3 * f0 + 2 * f1) % mod
7+
g1 = (2 * f0 + 2 * f1) % mod
8+
f0, f1 = g0, g1
9+
return (f0 + f1) % mod

0 commit comments

Comments
 (0)