美文网首页
leetcode 120- triangle

leetcode 120- triangle

作者: Ariana不会哭 | 来源:发表于2018-12-19 23:53 被阅读0次
    图片.png

    例子:
    [
    [2], ------选中2
    [3,4],------选中3
    [6,5,7],------选中5
    [4,1,8,3]------选中1
    ]
    解释:首先不是选取每一行中最小的数值,而是选中相邻位置的最小数。例如:如果在第三行选中5,在第五行只能在1 8之中选择最小的。
    如果这样解释此题就很容易想到DP:动态规划

    • 算法的基本思想:
      题目说是从上到下,但是这个方向很难控制下一层那个位置是最小的数值,所以采用从下到上。
      设置DP数组,大小为4(根据上面的例子),首先加入最后一行的全部数值。


      图片.png
    • 代码:
      C++:

    int minimumTotal(vector<vector<int>>& triangle) {
        int n = triangle.size();
        vector<int> dp(triangle.back());
        for (int i = n - 2; i >= 0; --i) {
            for (int j = 0; j <= i; ++j) {
                dp[j] = min(dp[j], dp[j + 1]) + triangle[i][j];
            }
        }
        return dp[0];
    }
    

    JAVA:

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

    相关文章

      网友评论

          本文标题:leetcode 120- triangle

          本文链接:https://www.haomeiwen.com/subject/ibfekqtx.html