当前位置: 代码迷 >> 综合 >> LeetCode ---- 120、三角形最小路径和
  详细解决方案

LeetCode ---- 120、三角形最小路径和

热度:54   发布时间:2024-02-07 14:30:11.0

题目链接

思路:

可以发现,每次走一步都依赖于上一步的选择,最终要选择从顶点走到最后一行 和 最小的路径

采用动态规划,构建一个数组来存储每次选择走到当前节点的最小路径和。

代码以及注释已完善,如下:

    public int minimumTotal(List<List<Integer>> triangle) {if (triangle == null || triangle.get(0) == null || triangle.get(0).size() == 0) {return 0;}// 三角形有几行int row = triangle.size();// 三角形最后一行有几列int col = triangle.get(row - 1).size();int[][] dp = new int[row][col];// 三角形顶点位置的路径和为其本身dp[0][0] = triangle.get(0).get(0);// 从第一行开始for (int i = 1; i < row; i++) {// 由于是三角形,每一行的数字个数等于这一行的行号+1for (int j = 0; j <= i; j++) {// 当前结点,可以从上一行同下标处走到,也可以从上一行下标-1处走到if (j > 0 && j <= i - 1) {// 两条路选最小,加上当前结点dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1]) + triangle.get(i).get(j);} else if (j == 0) { // 当前结点只能从上一行同下标处走到dp[i][j] = dp[i - 1][j] + triangle.get(i).get(j);} else {  // 当前结点只能从上一行下标-1处走到dp[i][j] = dp[i - 1][j - 1] + triangle.get(i).get(j);}}}int result = Integer.MAX_VALUE;// 在最后一行中寻找最小的路径和for (int j = 0; j < col; j++) {result = Math.min(result, dp[row - 1][j]);}return result;}