You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归调用中path变量未更新:LeetCode所有路径问题解法错误排查

代码问题分析
  • 参数赋值作用域问题:JavaScript中数组属于引用类型,你在findPath函数内执行path = [0]时,仅修改了当前函数作用域内path形参的指针指向,不会修改上层递归中传入的原数组内容,你预期的重置路径的操作根本不会作用到上层调用的路径上。
  • 缺少回溯操作:这类全路径搜索属于典型的回溯算法场景,正确逻辑是向路径中压入当前节点、递归搜索子节点、递归返回后弹出当前节点(回溯),你当前代码没有弹出操作,路径会不断堆积之前遍历过的节点,完全不符合预期。
  • 函数无返回值:入口函数allPaths最后没有返回收集好的result数组,调用后无法拿到最终结果。
修复后的代码
const allPaths = (edges) => {
  const graph = buildAdjacencyListGraph(edges);
  const result = []
  const path = [0];
  findPath(graph, 0, edges.length - 1, result, path)
  return result; // 补充返回结果
}

const findPath = (graph, src, dest, result, path) => {
  for (let neighbor of graph[src]) {
    path.push(neighbor);
    if (neighbor === dest) {
      result.push([...path])
    } else {
      findPath(graph, neighbor, dest, result, path);
    }
    path.pop(); // 回溯:递归完成后弹出当前节点,恢复路径状态
  }
}

const buildAdjacencyListGraph = (edges) => {
  const graph = {};
  for (let [i, edge] of edges.entries()) {
    graph[i] = edge;
  }
  return graph;
}

// 测试
const graph = [[4,3,1],[3,2,4],[3],[4],[]]
console.log(allPaths(graph)) // 输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]

内容的提问来源于stack exchange,提问作者Mike Sharpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:21:03