Skip to content

Commit 7cfd1f3

Browse files
authored
feat: add solutions to lc problem: No.0790 (#4389)
No.0790.Domino and Tromino Tiling
1 parent 2868b7d commit 7cfd1f3

File tree

5 files changed

+120
-13
lines changed

5 files changed

+120
-13
lines changed

solution/0700-0799/0790.Domino and Tromino Tiling/README.md

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ tags:
8686

8787
注意,过程中的状态数值可能会很大,因此需要对 $10^9+7$ 取模。
8888

89-
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为面板的列数
89+
时间复杂度 $O(n)$,其中 $n$ 为面板的列数。空间复杂度 $O(1)$。
9090

9191
<!-- tabs:start -->
9292

@@ -132,12 +132,11 @@ class Solution {
132132
```cpp
133133
class Solution {
134134
public:
135-
const int mod = 1e9 + 7;
136-
137135
int numTilings(int n) {
138-
long f[4] = {1, 0, 0, 0};
136+
const int mod = 1e9 + 7;
137+
long long f[4] = {1, 0, 0, 0};
139138
for (int i = 1; i <= n; ++i) {
140-
long g[4] = {0, 0, 0, 0};
139+
long long g[4];
141140
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
142141
g[1] = (f[2] + f[3]) % mod;
143142
g[2] = (f[1] + f[3]) % mod;
@@ -168,6 +167,46 @@ func numTilings(n int) int {
168167
}
169168
```
170169

170+
#### TypeScript
171+
172+
```ts
173+
function numTilings(n: number): number {
174+
const mod = 1_000_000_007;
175+
let f: number[] = [1, 0, 0, 0];
176+
177+
for (let i = 1; i <= n; ++i) {
178+
const g: number[] = Array(4);
179+
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
180+
g[1] = (f[2] + f[3]) % mod;
181+
g[2] = (f[1] + f[3]) % mod;
182+
g[3] = f[0] % mod;
183+
f = g;
184+
}
185+
186+
return f[0];
187+
}
188+
```
189+
190+
#### Rust
191+
192+
```rust
193+
impl Solution {
194+
pub fn num_tilings(n: i32) -> i32 {
195+
const MOD: i64 = 1_000_000_007;
196+
let mut f: [i64; 4] = [1, 0, 0, 0];
197+
for _ in 1..=n {
198+
let mut g = [0i64; 4];
199+
g[0] = (f[0] + f[1] + f[2] + f[3]) % MOD;
200+
g[1] = (f[2] + f[3]) % MOD;
201+
g[2] = (f[1] + f[3]) % MOD;
202+
g[3] = f[0] % MOD;
203+
f = g;
204+
}
205+
f[0] as i32
206+
}
207+
}
208+
```
209+
171210
<!-- tabs:end -->
172211

173212
<!-- solution:end -->

solution/0700-0799/0790.Domino and Tromino Tiling/README_EN.md

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,11 @@ class Solution {
126126
```cpp
127127
class Solution {
128128
public:
129-
const int mod = 1e9 + 7;
130-
131129
int numTilings(int n) {
132-
long f[4] = {1, 0, 0, 0};
130+
const int mod = 1e9 + 7;
131+
long long f[4] = {1, 0, 0, 0};
133132
for (int i = 1; i <= n; ++i) {
134-
long g[4] = {0, 0, 0, 0};
133+
long long g[4];
135134
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
136135
g[1] = (f[2] + f[3]) % mod;
137136
g[2] = (f[1] + f[3]) % mod;
@@ -162,6 +161,46 @@ func numTilings(n int) int {
162161
}
163162
```
164163

164+
#### TypeScript
165+
166+
```ts
167+
function numTilings(n: number): number {
168+
const mod = 1_000_000_007;
169+
let f: number[] = [1, 0, 0, 0];
170+
171+
for (let i = 1; i <= n; ++i) {
172+
const g: number[] = Array(4);
173+
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
174+
g[1] = (f[2] + f[3]) % mod;
175+
g[2] = (f[1] + f[3]) % mod;
176+
g[3] = f[0] % mod;
177+
f = g;
178+
}
179+
180+
return f[0];
181+
}
182+
```
183+
184+
#### Rust
185+
186+
```rust
187+
impl Solution {
188+
pub fn num_tilings(n: i32) -> i32 {
189+
const MOD: i64 = 1_000_000_007;
190+
let mut f: [i64; 4] = [1, 0, 0, 0];
191+
for _ in 1..=n {
192+
let mut g = [0i64; 4];
193+
g[0] = (f[0] + f[1] + f[2] + f[3]) % MOD;
194+
g[1] = (f[2] + f[3]) % MOD;
195+
g[2] = (f[1] + f[3]) % MOD;
196+
g[3] = f[0] % MOD;
197+
f = g;
198+
}
199+
f[0] as i32
200+
}
201+
}
202+
```
203+
165204
<!-- tabs:end -->
166205

167206
<!-- solution:end -->

solution/0700-0799/0790.Domino and Tromino Tiling/Solution.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution {
22
public:
3-
const int mod = 1e9 + 7;
4-
53
int numTilings(int n) {
6-
long f[4] = {1, 0, 0, 0};
4+
const int mod = 1e9 + 7;
5+
long long f[4] = {1, 0, 0, 0};
76
for (int i = 1; i <= n; ++i) {
8-
long g[4] = {0, 0, 0, 0};
7+
long long g[4];
98
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
109
g[1] = (f[2] + f[3]) % mod;
1110
g[2] = (f[1] + f[3]) % mod;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
impl Solution {
2+
pub fn num_tilings(n: i32) -> i32 {
3+
const MOD: i64 = 1_000_000_007;
4+
let mut f: [i64; 4] = [1, 0, 0, 0];
5+
for _ in 1..=n {
6+
let mut g = [0i64; 4];
7+
g[0] = (f[0] + f[1] + f[2] + f[3]) % MOD;
8+
g[1] = (f[2] + f[3]) % MOD;
9+
g[2] = (f[1] + f[3]) % MOD;
10+
g[3] = f[0] % MOD;
11+
f = g;
12+
}
13+
f[0] as i32
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function numTilings(n: number): number {
2+
const mod = 1_000_000_007;
3+
let f: number[] = [1, 0, 0, 0];
4+
5+
for (let i = 1; i <= n; ++i) {
6+
const g: number[] = Array(4);
7+
g[0] = (f[0] + f[1] + f[2] + f[3]) % mod;
8+
g[1] = (f[2] + f[3]) % mod;
9+
g[2] = (f[1] + f[3]) % mod;
10+
g[3] = f[0] % mod;
11+
f = g;
12+
}
13+
14+
return f[0];
15+
}

0 commit comments

Comments
 (0)