今天小弟做到 leetcode 的 62 题
var uniquePaths = function (m, n) { // let grid = Array.from(new Array(m), () => new Array(n).fill(1)); let grid = new Array(m).fill(new Array(n).fill(1)) console.log('第一个 log',grid) for (let i = 1; i < m; i++){ for (let j = 1; j < n; j++){ grid[i][j] = grid[i - 1][j] + grid[i][j - 1]; } }; console.log('第二个 log',grid); return grid.pop().pop(); }; niquePaths(7,3);
先上一下代码,这里我想创造一个 m*n,每一项都是 1 的数组,所以用到了 new Array(m).fill(new Array(n).fill(1)); 在第一个 Log 里打印出来的是 [ [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ] ]; OK,正好是我想要的 但是在最后的结果里这个 grid 的数值变成了 [ [ 1, 7, 28 ], [ 1, 7, 28 ], [ 1, 7, 28 ], [ 1, 7, 28 ], [ 1, 7, 28 ], [ 1, 7, 28 ], [ 1, 7, 28 ] ]; 这完全不符合我的逻辑啊 于是看了一下别人代码,用另外一种方法创造数组: let grid = Array.from(new Array(m), () => new Array(n).fill(1));
最后的结果是 [ [ 1, 1, 1 ], [ 1, 2, 3 ], [ 1, 3, 6 ], [ 1, 4, 10 ], [ 1, 5, 15 ], [ 1, 6, 21 ], [ 1, 7, 28 ] ]; 这个答案是我想要且正确的 难道是第一步创造数组的时候出现了问题? 可在第一个 log 里打出来的 grid 都是 [ [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ] ]; 为什么后面会变化呢? 难道涉及到了我不知道的知识点么 有 JS 大佬讲解下么
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.