|
| 1 | +object Solution { |
| 2 | + |
| 3 | + def solve(grid: Array[Array[Int]], pathMin: Array[Array[Int]], x_max: Int, y_max: Int): Int = { |
| 4 | + if (pathMin(y_max)(x_max) < 0){ |
| 5 | + -pathMin(y_max)(x_max) |
| 6 | + }else if (x_max == 0){ |
| 7 | + (0 to y_max).map(grid(_)(0)).sum |
| 8 | + }else if (y_max == 0){ |
| 9 | + grid(0).take(x_max + 1).sum |
| 10 | + }else{ |
| 11 | + pathMin(y_max)(x_max) = -(Math.min(solve(grid, pathMin, x_max - 1, y_max), solve(grid, pathMin, x_max, y_max - 1)) + grid(y_max)(x_max)) |
| 12 | + -pathMin(y_max)(x_max) |
| 13 | + } |
| 14 | + } |
| 15 | + |
| 16 | + def minPathSum(grid: Array[Array[Int]]): Int = { |
| 17 | + val x_max = grid(0).length - 1 |
| 18 | + val y_max = grid.length - 1 |
| 19 | + solve(grid, grid.clone, x_max, y_max) |
| 20 | + } |
| 21 | +} |
0 commit comments