Leetcode刷题(第133题)——克隆图

x33g5p2x  于2022-03-11 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(302)

一、题目

二、示例

  1. 输入:adjList = [[2,4],[1,3],[2,4],[1,3]]
  2. 输出:[[2,4],[1,3],[2,4],[1,3]]
  3. 解释:
  4. 图中有 4 个节点。
  5. 节点 1 的值是 1,它有两个邻居:节点 2 4
  6. 节点 2 的值是 2,它有两个邻居:节点 1 3
  7. 节点 3 的值是 3,它有两个邻居:节点 2 4
  8. 节点 4 的值是 4,它有两个邻居:节点 1 3

  1. 输入:adjList = [[]]
  2. 输出:[[]]
  3. 解释:输入包含一个空列表。该图仅仅只有一个值为 1 的节点,它没有任何邻居。
  1. 输入:adjList = []
  2. 输出:[]
  3. 解释:这个图是空的,它不含任何节点。

  1. 输入:adjList = [[2],[1]]
  2. 输出:[[2],[1]]

三、思路
本题采用图的深度优先遍历,然后对全部的当前访问的图节点进行克隆,并且将其放入map中。然后遍历该节点相邻的每一个节点,然后判断该节点是否访问过,如果没有访问,则使用深度优先遍历进行访问,如果访问过,则将其插入当前节点的克隆节点的neighbors中。
四、代码

  1. /**
  2. * // Definition for a Node.
  3. * function Node(val, neighbors) {
  4. * this.val = val === undefined ? 0 : val;
  5. * this.neighbors = neighbors === undefined ? [] : neighbors;
  6. * };
  7. */
  8. /**
  9. * @param {Node} node
  10. * @return {Node}
  11. */
  12. var cloneGraph = function(node) {
  13. let map = new Map()
  14. if(!node) return
  15. const dfs = (node) => {
  16. map.set(node, new Node(node.val))
  17. node.neighbors.forEach(item => {
  18. if(!map.has(item)) {
  19. dfs(item)
  20. }
  21. map.get(node).neighbors.push(map.get(item))
  22. })
  23. }
  24. dfs(node)
  25. return map.get(node)
  26. };

五、总结

相关文章