2021.09.27 - 090.三角形最小路径和

1. 题目

在这里插入图片描述

2. 思路

(1) 动态规划

  • 这道题的状态转移方程是dp[i][j] = Math.min(dp[i + 1][j], dp[i + 1][j + 1]) + triangle[i][j],核心在于自底向上推导,而不是自顶向下推导。
  • 存储最小路径和的二维数组的宽和高应该比原链表大1,方便最后一层计算。

(2) 动态规划优化

  • 由于每次计算时只用到了上一层计算的结果,因此只需要一个一维数组保存上一层计算的结果即可,这一层计算的结果直接覆盖上一层计算的结果即可。

3. 代码

import java.util.List;

public class Test {
    
    
    public static void main(String[] args) {
    
    
    }
}

class Solution {
    
    
    public int minimumTotal(List<List<Integer>> triangle) {
    
    
        int n = triangle.size();
        int[][] dp = new int[n + 1][n + 1];
        for (int i = n - 1; i >= 0; i--) {
    
    
            for (int j = 0; j <= i; j++) {
    
    
                dp[i][j] = Math.min(dp[i + 1][j], dp[i + 1][j + 1]) + triangle.get(i).get(j);
            }
        }
        return dp[0][0];
    }
}

class Solution1 {
    
    
    public int minimumTotal(List<List<Integer>> triangle) {
    
    
        int n = triangle.size();
        int[] dp = new int[n + 1];
        for (int i = n - 1; i >= 0; i--) {
    
    
            for (int j = 0; j <= i; j++) {
    
    
                dp[j] = Math.min(dp[j], dp[j + 1]) + triangle.get(i).get(j);
            }
        }
        return dp[0];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44021223/article/details/120512331