LeetCode——120.三角形最小路径和

通过万岁!!!

  • 题目:就是给你一个三角形的数组tri,然后让你从头开始出发,途径的地方有数,就进行累加,然后到最后一层时,如何让身上的数最小。
  • 思路:首先这个题也是动态规划的题目。首先明确,我们在任何一行,都可以发现,这是一个子问题,所以基本确定可以用dp。然后就是定义一个dp数组,这个数组我定义的时n*n的,其中n是给定的三角形数组的行数。进阶版说将空间复杂度降低到n,但是我没想到。这个数组中要保存一些内容,就是到达i,j位置的数最小数之和是多少。然后dp[i, j]=min(dp[i-1, j], dp[i-1, j-1])+tri[i, j]。最后我们返回dp数组最后一行的最小值即可。
  • 技巧:动态规划

java代码

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        // 这个题,我们需要记录,第i行,第j列位置的值,然后返回最后一行的最小值即可。
        int size = triangle.size();
        int[][] dp = new int[size][size];
        dp[0][0] = triangle.get(0).get(0);// 这个数组,我们的主对角线和第一列需要先进行填充
        int t1 = 0, t2 = 0;
        for (int i = 0; i < size; i++) {
            t1 += triangle.get(i).get(0);
            t2 += triangle.get(i).get(i);
            dp[i][0] = t1;
            dp[i][i] = t2;
        }
        for (int i = 1; i < size; i++) {
            for (int j = 1; j < i; j++) {
                dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1]) + triangle.get(i).get(j);
            }
        }
        int ans = Integer.MAX_VALUE;
        for (int i = 0; i < size; i++) {
            ans = Math.min(dp[size - 1][i], ans);
        }
        return ans;
    }
}
  • 总结:其实按照我的四个步骤来,动态规划的题目也不是很难。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值