Skip to content

Commit 9a5717e

Browse files
authored
feat: add swift implementation to lcci problem: No.17.23 (doocs#2818)
1 parent a803a2b commit 9a5717e

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

lcci/17.23.Max Black Square/README.md

+32
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,38 @@ function findSquare(matrix: number[][]): number[] {
225225
}
226226
```
227227

228+
```swift
229+
class Solution {
230+
func findSquare(_ matrix: [[Int]]) -> [Int] {
231+
let n = matrix.count
232+
var down = Array(repeating: Array(repeating: 0, count: n), count: n)
233+
var right = Array(repeating: Array(repeating: 0, count: n), count: n)
234+
235+
for i in stride(from: n - 1, through: 0, by: -1) {
236+
for j in stride(from: n - 1, through: 0, by: -1) {
237+
if matrix[i][j] == 0 {
238+
down[i][j] = (i + 1 < n) ? down[i + 1][j] + 1 : 1
239+
right[i][j] = (j + 1 < n) ? right[i][j + 1] + 1 : 1
240+
}
241+
}
242+
}
243+
244+
for k in stride(from: n, through: 1, by: -1) {
245+
for i in 0...(n - k) {
246+
for j in 0...(n - k) {
247+
if down[i][j] >= k && right[i][j] >= k &&
248+
right[i + k - 1][j] >= k && down[i][j + k - 1] >= k {
249+
return [i, j, k]
250+
}
251+
}
252+
}
253+
}
254+
255+
return []
256+
}
257+
}
258+
```
259+
228260
<!-- tabs:end -->
229261

230262
<!-- end -->

lcci/17.23.Max Black Square/README_EN.md

+32
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,38 @@ function findSquare(matrix: number[][]): number[] {
211211
}
212212
```
213213

214+
```swift
215+
class Solution {
216+
func findSquare(_ matrix: [[Int]]) -> [Int] {
217+
let n = matrix.count
218+
var down = Array(repeating: Array(repeating: 0, count: n), count: n)
219+
var right = Array(repeating: Array(repeating: 0, count: n), count: n)
220+
221+
for i in stride(from: n - 1, through: 0, by: -1) {
222+
for j in stride(from: n - 1, through: 0, by: -1) {
223+
if matrix[i][j] == 0 {
224+
down[i][j] = (i + 1 < n) ? down[i + 1][j] + 1 : 1
225+
right[i][j] = (j + 1 < n) ? right[i][j + 1] + 1 : 1
226+
}
227+
}
228+
}
229+
230+
for k in stride(from: n, through: 1, by: -1) {
231+
for i in 0...(n - k) {
232+
for j in 0...(n - k) {
233+
if down[i][j] >= k && right[i][j] >= k &&
234+
right[i + k - 1][j] >= k && down[i][j + k - 1] >= k {
235+
return [i, j, k]
236+
}
237+
}
238+
}
239+
}
240+
241+
return []
242+
}
243+
}
244+
```
245+
214246
<!-- tabs:end -->
215247

216248
<!-- end -->
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
func findSquare(_ matrix: [[Int]]) -> [Int] {
3+
let n = matrix.count
4+
var down = Array(repeating: Array(repeating: 0, count: n), count: n)
5+
var right = Array(repeating: Array(repeating: 0, count: n), count: n)
6+
7+
for i in stride(from: n - 1, through: 0, by: -1) {
8+
for j in stride(from: n - 1, through: 0, by: -1) {
9+
if matrix[i][j] == 0 {
10+
down[i][j] = (i + 1 < n) ? down[i + 1][j] + 1 : 1
11+
right[i][j] = (j + 1 < n) ? right[i][j + 1] + 1 : 1
12+
}
13+
}
14+
}
15+
16+
for k in stride(from: n, through: 1, by: -1) {
17+
for i in 0...(n - k) {
18+
for j in 0...(n - k) {
19+
if down[i][j] >= k && right[i][j] >= k &&
20+
right[i + k - 1][j] >= k && down[i][j + k - 1] >= k {
21+
return [i, j, k]
22+
}
23+
}
24+
}
25+
}
26+
27+
return []
28+
}
29+
}

0 commit comments

Comments
 (0)