@@ -36,20 +36,21 @@ Given a `m x n` `grid` filled with non-negative numbers, find a path from top le
3636
3737``` elixir
3838defmodule Solution do
39- @spec min_path_sum (grid :: [[integer]]) :: integer
40- def min_path_sum (grid) do
41- traverse (grid, [0 | List .duplicate (20000 , 199 )])
42- end
43-
44- defp traverse ([], prev_row), do: Enum .at (prev_row, - 1 )
45- defp traverse ([[first | row] | rows], [prev_row_head | prev_row]) do
46- prev_row = traverse_row (row, prev_row, [first + prev_row_head])
47- traverse (rows, prev_row)
48- end
49-
50- defp traverse_row ([], _prev_row , acc), do: Enum .reverse (acc)
51- defp traverse_row ([head | tail], [top | prev_row], [prev | _rest ] = acc) do
52- traverse_row (tail, prev_row, [head + min (prev, top) | acc])
53- end
39+ @spec min_path_sum (grid :: [[integer]]) :: integer
40+ def min_path_sum (grid) do
41+ grid_width = length (hd (grid)) # Determine the number of columns in the grid
42+ traverse (grid, [0 | List .duplicate (:infinity , grid_width - 1 )])
43+ end
44+
45+ defp traverse ([], prev_row), do: Enum .at (prev_row, - 1 )
46+ defp traverse ([[first | row] | rows], [prev_row_head | prev_row]) do
47+ prev_row = traverse_row (row, prev_row, [first + prev_row_head])
48+ traverse (rows, prev_row)
49+ end
50+
51+ defp traverse_row ([], _prev_row , acc), do: Enum .reverse (acc)
52+ defp traverse_row ([head | tail], [top | prev_row], [prev | _rest ] = acc) do
53+ traverse_row (tail, prev_row, [head + min (prev, top) | acc])
54+ end
5455end
5556```
0 commit comments