g0101_0200.s0120_triangle.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0101_0200.s0120_triangle;
// #Medium #Array #Dynamic_Programming #Algorithm_I_Day_12_Dynamic_Programming
// #Dynamic_Programming_I_Day_13 #Udemy_Dynamic_Programming
// #2022_06_23_Time_2_ms_(94.63%)_Space_44.2_MB_(36.02%)
import java.util.Arrays;
import java.util.List;
/**
* 120 - Triangle\.
*
* Medium
*
* Given a `triangle` array, return _the minimum path sum from top to bottom_.
*
* For each step, you may move to an adjacent number of the row below. More formally, if you are on index `i` on the current row, you may move to either index `i` or index `i + 1` on the next row.
*
* **Example 1:**
*
* **Input:** triangle = \[\[2],[3,4],[6,5,7],[4,1,8,3]]
*
* **Output:** 11
*
* **Explanation:**
*
* The triangle looks like:
* 2
* 3 4
* 6 5 7
* 4 1 8 3
* The minimum path sum from top to bottom is 2 + 3 + 5 + 1 = 11 (underlined above).
*
* **Example 2:**
*
* **Input:** triangle = \[\[-10]]
*
* **Output:** -10
*
* **Constraints:**
*
* * `1 <= triangle.length <= 200`
* * `triangle[0].length == 1`
* * `triangle[i].length == triangle[i - 1].length + 1`
* * -104 <= triangle[i][j] <= 104
*
* **Follow up:** Could you do this using only `O(n)` extra space, where `n` is the total number of rows in the triangle?
**/
public class Solution {
public int minimumTotal(List> triangle) {
if (triangle == null || triangle.isEmpty()) {
return 0;
}
int[][] dp = new int[triangle.size()][triangle.get(triangle.size() - 1).size()];
for (int[] temp : dp) {
Arrays.fill(temp, -10001);
}
return dfs(triangle, dp, 0, 0);
}
private int dfs(List> triangle, int[][] dp, int row, int col) {
if (row >= triangle.size()) {
return 0;
}
if (dp[row][col] != -10001) {
return dp[row][col];
}
int sum =
triangle.get(row).get(col)
+ Math.min(
dfs(triangle, dp, row + 1, col),
dfs(triangle, dp, row + 1, col + 1));
dp[row][col] = sum;
return sum;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy