题目
https://leetcode-cn.com/problems/triangle/comments/
java解
package com.wz;
import java.util.Arrays;
import java.util.List;
public class Algorithm {
public static void main(String[] args) {
List<List<Integer>> triangle = Arrays.asList(
Arrays.asList(2),
Arrays.asList(3, 4),
Arrays.asList(6, 5, 7),
Arrays.asList(4, 1, 8, 3)
);
int res = new Solution().minimumTotal(triangle);
System.out.println(res);
}
}
class Solution {
Integer[][] memo;
public int minimumTotal(List<List<Integer>> triangle) {
memo = new Integer[triangle.size()][triangle.size()];
return dfs(triangle, 0, 0);
}
private int dfs(List<List<Integer>> triangle, int i, int j) {
if (i == triangle.size()) {
return 0;
}
if (memo[i][j] != null) {
return memo[i][j];
}
return Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1)) + triangle.get(i).get(j);
}
}
js翻译一遍,结果就是不正确,我怎么都找不到问题,辗转睡不着
/**
* @param {number[][]} triangle
* @return {number}
*/
let memo = []
var minimumTotal = function (triangle) {
memo = new Array(triangle.length).fill(new Array(triangle.length).fill(null))
return dfs(triangle, 0, 0)
};
function dfs(triangle, i, j) {
if (i === triangle.length)
return 0
if (memo[i][j] !== null)
return memo[i][j]
return memo[i][j] = triangle[i][j] + Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1))
}
minimumTotal([[2],[3,4],[6,5,7],[4,1,8,3]])
最后发现是new Array().fill()的问题,我本想快速的初始化一个二维数组
这里的第一个fill是用一个对象填充的,对这个对象进行修改会造成连锁反应。
百度了一下,网上已经有同样爬坑的了
这是我的新答案
/**
* @param {number[][]} triangle
* @return {number}
*/
let m = []
var minimumTotal = function(triangle) {
for(let i = 0; i < triangle.length; i++){
const arr = new Array(triangle.length).fill(null)
m.push(arr)
}
return dfs(triangle, 0, 0)
};
function dfs(triangle, i, j){
if(i === triangle.length)
return 0
if(m[i][j] !== null)
return m[i][j]
return m[i][j] = triangle[i][j] + Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1))
}
提交失败但是测试能通过,我无语了已经