leecode第120题:
题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。
例如,给定三角形:
1 | [ |
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
链接
解题思路:直观上,从三角形的顶部,每次选择下一步可选的位置中较小的值,直到三角形的底部位置,该路径就为最小路径。然而这是错误的,例如:
1 | [ |
最小路径应为:2+4+1+3,而不是2+3+5+1。
正确的思路是:从底部往上计算,选择最后一行作为dp数组,从倒数第二行开始往上计算。dp[j]的含义为改位置到底部的最小距离,因此计算结束后,dp[0]就是所求的结果。
代码:
1 | int minimumTotal(vector<vector<int>>& triangle) { |