题目
    https://leetcode-cn.com/problems/triangle/comments/
    java解

    1. package com.wz;
    2. import java.util.Arrays;
    3. import java.util.List;
    4. public class Algorithm {
    5. public static void main(String[] args) {
    6. List<List<Integer>> triangle = Arrays.asList(
    7. Arrays.asList(2),
    8. Arrays.asList(3, 4),
    9. Arrays.asList(6, 5, 7),
    10. Arrays.asList(4, 1, 8, 3)
    11. );
    12. int res = new Solution().minimumTotal(triangle);
    13. System.out.println(res);
    14. }
    15. }
    16. class Solution {
    17. Integer[][] memo;
    18. public int minimumTotal(List<List<Integer>> triangle) {
    19. memo = new Integer[triangle.size()][triangle.size()];
    20. return dfs(triangle, 0, 0);
    21. }
    22. private int dfs(List<List<Integer>> triangle, int i, int j) {
    23. if (i == triangle.size()) {
    24. return 0;
    25. }
    26. if (memo[i][j] != null) {
    27. return memo[i][j];
    28. }
    29. return Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1)) + triangle.get(i).get(j);
    30. }
    31. }

    js翻译一遍,结果就是不正确,我怎么都找不到问题,辗转睡不着

    1. /**
    2. * @param {number[][]} triangle
    3. * @return {number}
    4. */
    5. let memo = []
    6. var minimumTotal = function (triangle) {
    7. memo = new Array(triangle.length).fill(new Array(triangle.length).fill(null))
    8. return dfs(triangle, 0, 0)
    9. };
    10. function dfs(triangle, i, j) {
    11. if (i === triangle.length)
    12. return 0
    13. if (memo[i][j] !== null)
    14. return memo[i][j]
    15. return memo[i][j] = triangle[i][j] + Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1))
    16. }
    17. minimumTotal([[2],[3,4],[6,5,7],[4,1,8,3]])

    最后发现是new Array().fill()的问题,我本想快速的初始化一个二维数组
    image.png
    这里的第一个fill是用一个对象填充的,对这个对象进行修改会造成连锁反应。

    百度了一下,网上已经有同样爬坑的了
    image.png
    这是我的新答案

    1. /**
    2. * @param {number[][]} triangle
    3. * @return {number}
    4. */
    5. let m = []
    6. var minimumTotal = function(triangle) {
    7. for(let i = 0; i < triangle.length; i++){
    8. const arr = new Array(triangle.length).fill(null)
    9. m.push(arr)
    10. }
    11. return dfs(triangle, 0, 0)
    12. };
    13. function dfs(triangle, i, j){
    14. if(i === triangle.length)
    15. return 0
    16. if(m[i][j] !== null)
    17. return m[i][j]
    18. return m[i][j] = triangle[i][j] + Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1))
    19. }

    提交失败但是测试能通过,我无语了已经
    image.png
    image.png