【发布时间】:2021-01-21 00:43:07
【问题描述】:
所以我正在用 javascript 自学数据结构,并且正在尝试 [Leetcode 200][1]。我想知道为什么如果我在这样的函数中有网格数组,它会起作用:
function numIslands(grid) {
const H = grid.length;
const W = H && grid[0].length;
let count = 0;
for (let r = 0; r < H; r++) {
for (let c = 0; c < W; c++) {
if (grid[r][c] === '0') continue;
count++;
dfs(r, c);
}
}
return count;
function dfs(r, c) {
if (r < 0 || c < 0 || r === H || c === W) return;
if (grid[r][c] === '0') return;
grid[r][c] = '0';
dfs(r-1, c);
dfs(r+1, c);
dfs(r, c-1);
dfs(r, c+1);
}
}
但是,如果我创建一个辅助函数并像这样将网格数组传递给它,它就不起作用,并且我收到一条错误消息
Line 25 in solution.js if (grid[r][c] === '0') return; TypeError: Cannot read property '1' of undefined
function numIslands(grid) {
const H = grid.length;
const W = H && grid[0].length;
let count = 0;
for (let r = 0; r < H; r++) {
for (let c = 0; c < W; c++) {
if (grid[r][c] === '0') continue;
count++;
dfs(r, c, grid, H, W);
}
}
return count;
}
function dfs(r, c, grid, H, W) {
if (r < 0 || c < 0 || r === H || c === W) return;
if (grid[r][c] === '0') return;
grid[r][c] = '0';
dfs(r - 1, c);
dfs(r + 1, c);
dfs(r, c - 1);
dfs(r, c + 1);
}
}
这是否与数组如何通过引用或值传递有关,我仍然有点不清楚区别。谢谢! [1]:https://leetcode.com/problems/number-of-islands
【问题讨论】:
-
JavaScript 中的每个值都通过 值传递,但如果您传递的是对象,则该值 是 引用。传递 by 引用和传递 a 引用是两件不同的事情。通过值/引用传递描述了变量之间的关系,而不是值之间的关系。
标签: javascript arrays algorithm data-structures