Javascript LeetCode 120:三角形-最小路径和
我在leetcode上做: 给定一个三角形,求从上到下的最小路径和。每一步您都可以移动到下一行的相邻数字 我的逻辑是找到每个数组中的最小数,并将其添加到总和中 这是我的javascript代码:Javascript LeetCode 120:三角形-最小路径和,javascript,algorithm,dynamic-programming,Javascript,Algorithm,Dynamic Programming,我在leetcode上做: 给定一个三角形,求从上到下的最小路径和。每一步您都可以移动到下一行的相邻数字 我的逻辑是找到每个数组中的最小数,并将其添加到总和中 这是我的javascript代码: var minimumTotal = function(triangle) { let sum = 0; for (let i = 0; i < triangle.length; i++) { sum += Math.min.apply(null, triangle
var minimumTotal = function(triangle) {
let sum = 0;
for (let i = 0; i < triangle.length; i++) {
sum += Math.min.apply(null, triangle[i])
}
return sum;
};
var minimumTotal=函数(三角形){
设和=0;
for(设i=0;i
但是它不适用于这个测试用例:[[-1],[2,3],[1,-1,-3]]
预期输出为-1
。我不知道它应该如何等于-1
,因为-1+2=1
和1
相加时,第三个数组中的数字都不等于-1
我看了讨论的答案,他们都使用了某种动态规划解决方案
我做错了什么?有一个路径,其中输出应该是-1
[
[ -1 ],
[ 2, 3 ],
[ 1, -1, -3 ],
]
-1+3-3=-1
问题是,每个分叉处只有2个可能的分支,而似乎是从整行中选取了最小的分支
根据挑战规则,您不能从第二行的2变为第三行的-3,这将是您方法中最有效的路径。有一条路径,其中输出应为-1
[
[ -1 ],
[ 2, 3 ],
[ 1, -1, -3 ],
]
-1+3-3=-1
问题是,每个分叉处只有2个可能的分支,而似乎是从整行中选取了最小的分支
根据挑战规则,您不能从第二行的2变为第三行的-3,这是您的方法下最有效的路径。您所做的似乎没有遵循问题所需的数据结构。您正在生成一个
int
,而所需的输出应该是一个数组
正确答案已张贴在讨论板上: 此解决方案是可接受的(刚刚测试过): JavaScript JAVA
类解决方案{
公共整数最小总计(列表三角形){
int[]dp=新的int[-~triangle.size()];
对于(int row=triangle.size()-1;row>-1;row--)
for(int col=0;col
您所做的似乎并没有遵循问题所需的数据结构。您正在生成一个int
,而所需的输出应该是一个数组
正确答案已张贴在讨论板上: 此解决方案是可接受的(刚刚测试过): JavaScript JAVA
类解决方案{
公共整数最小总计(列表三角形){
int[]dp=新的int[-~triangle.size()];
对于(int row=triangle.size()-1;row>-1;row--)
for(int col=0;col
“我的逻辑是找到每个数组中的最小数并将其添加到总和”:这没有考虑到它应该是一个路径。您的逻辑可以选择相距很远的值。“我的逻辑是找到每个数组中的最小值,并将其添加到总和”:这没有考虑到它应该是一条路径。您的逻辑可以选择相距很远的值。
class Solution:
def minimumTotal(self, triangle):
if not triangle:
return
dp = triangle[-1]
for row in range(len(triangle) - 2, -1, -1):
for col in range(len(triangle[row])):
dp[col] = min(dp[col], dp[-~col]) + triangle[row][col]
return dp[0]
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int[] dp = new int[-~triangle.size()];
for (int row = triangle.size() - 1; row > -1; row--)
for (int col = 0; col < triangle.get(row).size(); col++)
dp[col] = Math.min(dp[col], dp[-~col]) + triangle.get(row).get(col);
return dp[0];
}
}