程序员面试金典---6
节点间通路
思路:邻接表+递归
实例:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2
首先构建邻接表
0->1->2 1->2
然后对每一行递归,查看是否能到达。
此外:还需要创建一个
visited
记录是否被访问过,出现环的问题
/** * @param {number} n * @param {number[][]} graph * @param {number} start * @param {number} target * @return {boolean} */ var findWhetherExistsPath = function(n, graph, start, target) { const isCanReach = function(arr,start,target,visited){ // 如果到了 if(start === target) return true // 如果被访问过了,说明有环, if(visited.has(start))return false // 添加访问 visited.add(start) // 循环邻接表的每一行 for(let next of arr[start]){ // 如果当前行可以存在路径 if(isCanReach(arr, next, target, visited)) return true } return false } // 邻接表 // 0->1->2 // 1->2 let arr = [] for(let i = 0; i < n; i++){ arr.push(new Set()) } for(let [s, e] of graph){ arr[s].add(e) } // 记录是否被访问过,防止出现环 const visited = new Set() // 递归遍历 return isCanReach(arr,start,target,visited) };
分类:
力扣-程序员面试金典题目整理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!