Untitled

🧩 Syntax:
class Solution {
    fun minPathSum(grid: Array<IntArray>): 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<IntArray>) {
      m.forEach { row ->
        println(row.contentToString())
      }
    }
}