美文网首页
120. 三角形最小路径和

120. 三角形最小路径和

作者: 间歇性发呆 | 来源:发表于2019-11-15 12:53 被阅读0次

    给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

    例如,给定三角形:

    [
    [2],
    [3,4],
    [6,5,7],
    [4,1,8,3]
    ]
    自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

    说明:

    如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/triangle
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    首先会想到的用DFS深度优先搜索,但是可以更简洁的使用动态规划

    动态规划分析:

    1. 从底向上,记录底部到当前的最短距离f(row, column)
    2. f(row, column) = min(f(row + 1, column), f(row + 1, column + 1)) + triangle[row, column]
    class Solution {
        /**
         * 动态规划:
         * 1. 从底向上,记录底部到当前的最短距离f(row, column)
         * 2. f(row, column) = min(f(row + 1, column), f(row + 1, column + 1)) + triangle[row, column]
         *
         * @param triangle
         * @return
         */
        public int minimumTotal(List<List<Integer>> triangle) {
            // 数组重复使用
            int[] minSum = new int[triangle.size() + 1];
            for (int row = triangle.size() - 1; row >= 0; row--) {
                for (int column = 0; column < triangle.get(row).size(); column++) {
                    minSum[column] = Math.min(minSum[column], minSum[column + 1]) + triangle.get(row).get(column);
                }
            }
            return minSum[0];
        }
    }
    
    运行效率

    相关文章

      网友评论

          本文标题:120. 三角形最小路径和

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