Skip to content

Commit 0181c7a

Browse files
committed
Kotlin: 329. Longest Increasing Path in a Matrix
1 parent 341ddaa commit 0181c7a

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
fun longestIncreasingPath(matrix: Array<IntArray>): Int {
3+
val m = matrix.size
4+
val n = matrix[0].size
5+
val memo = Array<IntArray>(m){IntArray(n)}
6+
val dirs = arrayOf(intArrayOf(-1,0),intArrayOf(1,0),intArrayOf(0,1),intArrayOf(0,-1))
7+
var res = 1
8+
9+
for (i in 0..m-1) {
10+
for (j in 0..n-1) {
11+
val len = dfs(matrix, i, j, dirs, memo)
12+
res = Math.max(res, len)
13+
}
14+
}
15+
16+
return res
17+
}
18+
19+
fun dfs(matrix: Array<IntArray>, row: Int, col: Int, dirs: Array<IntArray>, memo: Array<IntArray>): Int {
20+
val m = matrix.size
21+
val n = matrix[0].size
22+
23+
if (memo[row][col] != 0)
24+
return memo[row][col]
25+
26+
var len = 1
27+
28+
for (dir in dirs) {
29+
val x = dir[0] + row
30+
val y = dir[1] + col
31+
32+
if (x < 0 || x == m || y < 0 || y == n || matrix[row][col] >= matrix[x][y])
33+
continue
34+
35+
len = Math.max(len, 1+dfs(matrix, x, y, dirs, memo))
36+
}
37+
38+
memo[row][col] = len
39+
return len
40+
}
41+
}

0 commit comments

Comments
 (0)