Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript LeetCode 120:三角形-最小路径和_Javascript_Algorithm_Dynamic Programming - Fatal编程技术网

Javascript LeetCode 120:三角形-最小路径和

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

我在leetcode上做:

给定一个三角形,求从上到下的最小路径和。每一步您都可以移动到下一行的相邻数字

我的逻辑是找到每个数组中的最小数,并将其添加到总和中

这是我的javascript代码:

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];
    }
}