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 730384f

Browse files
committed
feat: add solutions to lc problem: No.1240
No.1240.Tiling a Rectangle with the Fewest Squares
1 parent a094026 commit 730384f

File tree

4 files changed

+152
-4
lines changed

4 files changed

+152
-4
lines changed

‎solution/1200-1299/1240.Tiling a Rectangle with the Fewest Squares/README.md‎

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959

6060
我们可以按位置进行递归回溯。如果当前位置 $(i, j)$ 已经被填充,则直接递归到下一个位置 $(i, j + 1)$。否则,我们枚举当前位置 $(i, j)$ 可以填充的最大正方形的边长 $w,ドル并将当前位置 $(i, j)$ 到 $(i + w - 1, j + w - 1)$ 的位置全部填充,然后递归到下一个位置 $(i, j + w)$。在回溯时,我们需要将当前位置 $(i, j)$ 到 $(i + w - 1, j + w - 1)$ 的位置全部清空。
6161

62-
由于每个位置只有两种状态:填充或者未填充,因此我们可以使用一个整数来表示当前位置的状态。我们使用一个长度为 $n$ 的整数数组 `filled`,其中 `filled[i]` 表示第 $i$ 行的状态。如果 `filled[i]` 的第 $j$ 位为 1ドル,ドル则表示第 $i$ 行第 $j$ 列已经被填充,否则表示未填充。
62+
由于每个位置只有两种状态:填充或者未填充,因此我们可以使用一个整数来表示当前位置的状态。我们使用一个长度为 $n$ 的整数数组 $filled$,其中 $filled[i]$ 表示第 $i$ 行的状态。如果 $filled[i]$ 的第 $j$ 位为 1ドル,ドル则表示第 $i$ 行第 $j$ 列已经被填充,否则表示未填充。
6363

6464
<!-- tabs:start -->
6565

@@ -70,7 +70,7 @@
7070
```python
7171
class Solution:
7272
def tilingRectangle(self, n: int, m: int) -> int:
73-
def dfs(i, j, t):
73+
def dfs(i: int, j: int, t: int):
7474
nonlocal ans
7575
if j == m:
7676
i += 1
@@ -290,6 +290,57 @@ func min(a, b int) int {
290290
}
291291
```
292292

293+
### **TypeScript**
294+
295+
```ts
296+
function tilingRectangle(n: number, m: number): number {
297+
let ans = n * m;
298+
const filled: number[] = new Array(n).fill(0);
299+
const dfs = (i: number, j: number, t: number) => {
300+
if (j === m) {
301+
++i;
302+
j = 0;
303+
}
304+
if (i === n) {
305+
ans = t;
306+
return;
307+
}
308+
if ((filled[i] >> j) & 1) {
309+
dfs(i, j + 1, t);
310+
} else if (t + 1 < ans) {
311+
let [r, c] = [0, 0];
312+
for (let k = i; k < n; ++k) {
313+
if ((filled[k] >> j) & 1) {
314+
break;
315+
}
316+
++r;
317+
}
318+
for (let k = j; k < m; ++k) {
319+
if ((filled[i] >> k) & 1) {
320+
break;
321+
}
322+
++c;
323+
}
324+
const mx = Math.min(r, c);
325+
for (let w = 1; w <= mx; ++w) {
326+
for (let k = 0; k < w; ++k) {
327+
filled[i + w - 1] |= 1 << (j + k);
328+
filled[i + k] |= 1 << (j + w - 1);
329+
}
330+
dfs(i, j + w, t + 1);
331+
}
332+
for (let x = i; x < i + mx; ++x) {
333+
for (let y = j; y < j + mx; ++y) {
334+
filled[x] ^= 1 << y;
335+
}
336+
}
337+
}
338+
};
339+
dfs(0, 0, 0);
340+
return ans;
341+
}
342+
```
343+
293344
### **...**
294345

295346
```

‎solution/1200-1299/1240.Tiling a Rectangle with the Fewest Squares/README_EN.md‎

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
```python
5353
class Solution:
5454
def tilingRectangle(self, n: int, m: int) -> int:
55-
def dfs(i, j, t):
55+
def dfs(i: int, j: int, t: int):
5656
nonlocal ans
5757
if j == m:
5858
i += 1
@@ -270,6 +270,57 @@ func min(a, b int) int {
270270
}
271271
```
272272

273+
### **TypeScript**
274+
275+
```ts
276+
function tilingRectangle(n: number, m: number): number {
277+
let ans = n * m;
278+
const filled: number[] = new Array(n).fill(0);
279+
const dfs = (i: number, j: number, t: number) => {
280+
if (j === m) {
281+
++i;
282+
j = 0;
283+
}
284+
if (i === n) {
285+
ans = t;
286+
return;
287+
}
288+
if ((filled[i] >> j) & 1) {
289+
dfs(i, j + 1, t);
290+
} else if (t + 1 < ans) {
291+
let [r, c] = [0, 0];
292+
for (let k = i; k < n; ++k) {
293+
if ((filled[k] >> j) & 1) {
294+
break;
295+
}
296+
++r;
297+
}
298+
for (let k = j; k < m; ++k) {
299+
if ((filled[i] >> k) & 1) {
300+
break;
301+
}
302+
++c;
303+
}
304+
const mx = Math.min(r, c);
305+
for (let w = 1; w <= mx; ++w) {
306+
for (let k = 0; k < w; ++k) {
307+
filled[i + w - 1] |= 1 << (j + k);
308+
filled[i + k] |= 1 << (j + w - 1);
309+
}
310+
dfs(i, j + w, t + 1);
311+
}
312+
for (let x = i; x < i + mx; ++x) {
313+
for (let y = j; y < j + mx; ++y) {
314+
filled[x] ^= 1 << y;
315+
}
316+
}
317+
}
318+
};
319+
dfs(0, 0, 0);
320+
return ans;
321+
}
322+
```
323+
273324
### **...**
274325

275326
```

‎solution/1200-1299/1240.Tiling a Rectangle with the Fewest Squares/Solution.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Solution:
22
def tilingRectangle(self, n: int, m: int) -> int:
3-
def dfs(i, j, t):
3+
def dfs(i: int, j: int, t: int):
44
nonlocal ans
55
if j == m:
66
i += 1
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function tilingRectangle(n: number, m: number): number {
2+
let ans = n * m;
3+
const filled: number[] = new Array(n).fill(0);
4+
const dfs = (i: number, j: number, t: number) => {
5+
if (j === m) {
6+
++i;
7+
j = 0;
8+
}
9+
if (i === n) {
10+
ans = t;
11+
return;
12+
}
13+
if ((filled[i] >> j) & 1) {
14+
dfs(i, j + 1, t);
15+
} else if (t + 1 < ans) {
16+
let [r, c] = [0, 0];
17+
for (let k = i; k < n; ++k) {
18+
if ((filled[k] >> j) & 1) {
19+
break;
20+
}
21+
++r;
22+
}
23+
for (let k = j; k < m; ++k) {
24+
if ((filled[i] >> k) & 1) {
25+
break;
26+
}
27+
++c;
28+
}
29+
const mx = Math.min(r, c);
30+
for (let w = 1; w <= mx; ++w) {
31+
for (let k = 0; k < w; ++k) {
32+
filled[i + w - 1] |= 1 << (j + k);
33+
filled[i + k] |= 1 << (j + w - 1);
34+
}
35+
dfs(i, j + w, t + 1);
36+
}
37+
for (let x = i; x < i + mx; ++x) {
38+
for (let y = j; y < j + mx; ++y) {
39+
filled[x] ^= 1 << y;
40+
}
41+
}
42+
}
43+
};
44+
dfs(0, 0, 0);
45+
return ans;
46+
}

0 commit comments

Comments
(0)

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