LeetCode120,求教

来源:9-3 发现重叠子问题 Integer Break

qq_山上山_0

2020-05-21

啵啵老司,感觉这个120,看起来简单,怎么做起来有点难啊
总感觉哪里没想明白;又好像用回溯法才对,因为要全部加了才知道那条路径是最小的
1、如果测试用例是[
[2],
[3,4],
[6,5,7],
[400,100,8,3]
] 该怎么办?而且看了递归做的,感觉状态转移方程还是没悟出来

    /// 120. 三角形最小路径和 (C#)
    public int MinimumTotal(IList<IList<int>> triangle)
    {
        int n = triangle.Count;
        int a = triangle[0][0];
        for (int i = 0; i < n-1; i++)
        {
            for (int j = i; j < i+2; j++)
            {
                a =  a + Math.Min(triangle[i+1][j], triangle[i+1][j + 1]);
            }
        }
        return a;
    }
写回答

1回答

liuyubobobo

2020-05-21

dp[i][j] 的意思是,走到 (i, j) 位置的最小 sum。


走到 (i, j) 位置的最小 sum,是和走到 (i - 1, j - 1) 位置的最小 sum 和 (i - 1, j) 位置的最小 sum 相关的。即两者取其一,再加上当前位置的值。


状态转移方程:

dp[i][j] = triangle[i][j] + min(dp[i - 1][j - 1], dp[i - 1][j])


我的参考代码:https://github.com/liuyubobobo/Play-Leetcode/blob/master/0120-Triangle/cpp-0120/main.cpp


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程