题目
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 0if (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 0if(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))}
提交失败但是测试能通过,我无语了已经

