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 7cfd1f3

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

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