@@ -6,43 +6,38 @@ package g1501_1600.s1594_maximum_non_negative_product_in_a_matrix
6
6
class Solution {
7
7
private class Tuple (var max : Long , var min : Long )
8
8
9
- fun maxProductPath (grid : Array <IntArray ?> ? ): Int {
9
+ fun maxProductPath (grid : Array <IntArray > ): Int {
10
10
// DP
11
- if (grid == null || grid.size == 0 || grid[0 ] == null || grid[ 0 ] !! .size == 0 ) {
11
+ if (grid.isEmpty() || grid[0 ].isEmpty() ) {
12
12
return 0
13
13
}
14
14
val rows = grid.size
15
- val cols = grid[0 ]!! .size
16
- val dp = Array (rows) { arrayOfNulls<Tuple >(cols) }
17
- for (i in 0 until rows) {
18
- for (j in 0 until cols) {
19
- dp[i][j] = Tuple (1 , 1 )
20
- }
21
- }
15
+ val cols = grid[0 ].size
16
+ val dp = Array (rows) { Array (cols) { Tuple (1 , 1 ) } }
22
17
// Init first row and column
23
- dp[0 ][0 ]!! .max = grid[0 ]!! [0 ].toLong()
24
- dp[0 ][0 ]!! .min = grid[0 ]!! [0 ].toLong()
18
+ dp[0 ][0 ].max = grid[0 ][0 ].toLong()
19
+ dp[0 ][0 ].min = grid[0 ][0 ].toLong()
25
20
for (i in 1 until rows) {
26
- dp[i][0 ]!! .max = grid[i]!! [0 ] * dp[i - 1 ][0 ]!! .max
27
- dp[i][0 ]!! .min = grid[i]!! [0 ] * dp[i - 1 ][0 ]!! .min
21
+ dp[i][0 ].max = grid[i][0 ] * dp[i - 1 ][0 ].max
22
+ dp[i][0 ].min = grid[i][0 ] * dp[i - 1 ][0 ].min
28
23
}
29
24
for (i in 1 until cols) {
30
- dp[0 ][i]!! .max = grid[0 ]!! [i] * dp[0 ][i - 1 ]!! .max
31
- dp[0 ][i]!! .min = grid[0 ]!! [i] * dp[0 ][i - 1 ]!! .min
25
+ dp[0 ][i].max = grid[0 ][i] * dp[0 ][i - 1 ].max
26
+ dp[0 ][i].min = grid[0 ][i] * dp[0 ][i - 1 ].min
32
27
}
33
28
// DP
34
29
for (i in 1 until rows) {
35
30
for (j in 1 until cols) {
36
- val up1 = dp[i - 1 ][j]!! .max * grid[i]!! [j]
37
- val up2 = dp[i - 1 ][j]!! .min * grid[i]!! [j]
38
- val left1 = dp[i][j - 1 ]!! .max * grid[i]!! [j]
39
- val left2 = dp[i][j - 1 ]!! .min * grid[i]!! [j]
40
- dp[i][j]!! .max = Math .max(up1, Math .max(up2, Math .max(left1, left2)))
41
- dp[i][j]!! .min = Math .min(up1, Math .min(up2, Math .min(left1, left2)))
31
+ val up1 = dp[i - 1 ][j].max * grid[i][j]
32
+ val up2 = dp[i - 1 ][j].min * grid[i][j]
33
+ val left1 = dp[i][j - 1 ].max * grid[i][j]
34
+ val left2 = dp[i][j - 1 ].min * grid[i][j]
35
+ dp[i][j].max = Math .max(up1, Math .max(up2, Math .max(left1, left2)))
36
+ dp[i][j].min = Math .min(up1, Math .min(up2, Math .min(left1, left2)))
42
37
}
43
38
}
44
- return if (dp[rows - 1 ][cols - 1 ]!! .max < 0 ) {
39
+ return if (dp[rows - 1 ][cols - 1 ].max < 0 ) {
45
40
- 1
46
- } else (dp[rows - 1 ][cols - 1 ]!! .max % (1e9 + 7 )).toInt()
41
+ } else (dp[rows - 1 ][cols - 1 ].max % (1e9 + 7 )).toInt()
47
42
}
48
43
}
0 commit comments