栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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> 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;
    }
}
  • 总结:其实按照我的四个步骤来,动态规划的题目也不是很难。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946657.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号