class Solution { fun minPathSum(grid: Array): Int { val h = grid.size val w = grid[0].size val m = Array(h) { IntArray(w) { 0 }} (0 until h).reversed().forEach { i -> (0 until w).reversed().forEach { j -> val value = grid[i][j] val rightSum = if (j == w - 1) null else m[i][j + 1] val downSum = if (i == h - 1) null else m[i + 1][j] m[i][j] = value + (listOfNotNull(rightSum, downSum).minOrNull() ?: 0) // println("i: $i, j: $j, m[i][j]=${m[i][j]}") } } // println("grid") // print(grid) // println("m") // print(m) return m[0][0] } fun print(m: Array) { m.forEach { row -> println(row.contentToString()) } } }