@@ -36,20 +36,21 @@ Given a `m x n` `grid` filled with non-negative numbers, find a path from top le
36
36
37
37
``` elixir
38
38
defmodule 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
54
55
end
55
56
```
0 commit comments