|
1 | 1 | # #Medium #Top_100_Liked_Questions #Array #Dynamic_Programming #Matrix
|
2 | 2 | # #Dynamic_Programming_I_Day_16 #Udemy_Dynamic_Programming #Big_O_Time_O(m*n)_Space_O(m*n)
|
3 |
| -# #2024_08_02_Time_285_ms_(100.00%)_Space_79.9_MB_(100.00%) |
| 3 | +# #2025_01_22_Time_3_(100.00%)_Space_89.73_(100.00%) |
4 | 4 |
|
5 | 5 | defmodule Solution do
|
6 |
| - @spec min_path_sum(grid :: [[integer]]) :: integer |
7 |
| - def min_path_sum(grid) do |
8 |
| - traverse(grid, [0 | List.duplicate(20000, 199)]) |
9 |
| - end |
| 6 | + @spec min_path_sum(grid :: [[integer]]) :: integer |
| 7 | + def min_path_sum(grid) do |
| 8 | + grid_width = length(hd(grid)) # Determine the number of columns in the grid |
| 9 | + traverse(grid, [0 | List.duplicate(:infinity, grid_width - 1)]) |
| 10 | + end |
10 | 11 |
|
11 |
| - defp traverse([], prev_row), do: Enum.at(prev_row, -1) |
12 |
| - defp traverse([[first | row] | rows], [prev_row_head | prev_row]) do |
13 |
| - prev_row = traverse_row(row, prev_row, [first + prev_row_head]) |
14 |
| - traverse(rows, prev_row) |
15 |
| - end |
| 12 | + defp traverse([], prev_row), do: Enum.at(prev_row, -1) |
| 13 | + defp traverse([[first | row] | rows], [prev_row_head | prev_row]) do |
| 14 | + prev_row = traverse_row(row, prev_row, [first + prev_row_head]) |
| 15 | + traverse(rows, prev_row) |
| 16 | + end |
16 | 17 |
|
17 |
| - defp traverse_row([], _prev_row, acc), do: Enum.reverse(acc) |
18 |
| - defp traverse_row([head | tail], [top | prev_row], [prev | _rest] = acc) do |
19 |
| - traverse_row(tail, prev_row, [head + min(prev, top) | acc]) |
20 |
| - end |
| 18 | + defp traverse_row([], _prev_row, acc), do: Enum.reverse(acc) |
| 19 | + defp traverse_row([head | tail], [top | prev_row], [prev | _rest] = acc) do |
| 20 | + traverse_row(tail, prev_row, [head + min(prev, top) | acc]) |
| 21 | + end |
21 | 22 | end
|
0 commit comments