【问题标题】:Javascript function array question in different functions不同函数中的Javascript函数数组问题
【发布时间】: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


【解决方案1】:

问题很可能是dfs调用自己时你没有传递gridHW

dfs(r - 1, c);
dfs(r + 1, c);
dfs(r, c - 1);
dfs(r, c + 1);

错误意味着gridgrid[r]undefined。如果您没有为参数显式传递值,则该参数将设置为undefined

你也必须在那里传递这些值:

dfs(r - 1, c, grid, H, W);
dfs(r + 1, c, grid, H, W);
dfs(r, c - 1, grid, H, W);
dfs(r, c + 1, grid, H, W);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多