如何解决不同函数中的Javascript函数数组问题
所以我正在用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,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
解决方法
问题很可能是您在 grid
调用自身时没有传递 H
、W
和 dfs
:
dfs(r - 1,c);
dfs(r + 1,c);
dfs(r,c - 1);
dfs(r,c + 1);
错误意味着 grid
或 grid[r]
是 undefined
。如果您没有为参数显式传递值,则该参数将设置为 undefined
。
你也必须在那里传递这些值:
dfs(r - 1,c,grid,H,W);
dfs(r + 1,W);
dfs(r,c - 1,c + 1,W);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。