Skip to content

Commit 98805a2

Browse files
authored
spiral matrix solution
1 parent 0238f39 commit 98805a2

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

spiral-matrix/yhkee0404.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
fun spiralOrder(matrix: Array<IntArray>): List<Int> {
3+
val visited = List(matrix.size) {MutableList(matrix.first().size) {false}} // T(n) = S(n) = O(n)
4+
val drcs = listOf(
5+
listOf(0, 1,),
6+
listOf(1, 0,),
7+
listOf(0, -1,),
8+
listOf(-1, 0,),
9+
)
10+
val ans = mutableListOf<Int>()
11+
search(ans, matrix, visited, drcs, 0, 0, 0, false)
12+
return ans
13+
}
14+
}
15+
16+
fun search(ans: MutableList<Int>, matrix: Array<IntArray>, visited: List<MutableList<Boolean>>, drcs: List<List<Int>>, r: Int, c: Int, dir: Int, turned: Boolean) {
17+
val drc = drcs[dir]
18+
if (r == -1 || r == matrix.size || c == -1 || c == matrix.first().size || visited[r][c]) {
19+
if (turned) {
20+
return
21+
}
22+
val nDir = (dir + 1) % drcs.size
23+
val nDrc = drcs[nDir]
24+
search(ans, matrix, visited, drcs, r - drc[0] + nDrc[0], c - drc[1] + nDrc[1], nDir, true)
25+
return
26+
}
27+
visited[r][c] = true
28+
ans.add(matrix[r][c])
29+
search(ans, matrix, visited, drcs, r + drc[0], c + drc[1], dir, false)
30+
}

0 commit comments

Comments
 (0)