1. 首页

LeetCode 133. 克隆图

题目描述

难度:Middle

相关话题:深度优先搜索广度优先搜索

给定无向连通
图中一个节点的引用,返回该图的深拷贝
(克隆)。图中的每个节点都包含它的值 valInt ) 和其邻居的列表( list[Node] )。

示例:

LeetCode 133. 克隆图

输入:{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neighbors":[{"$ref":"3"},{"$ref":"1"}],"val":4}],"val":3}],"val":2},{"$ref":"4"}],"val":1}

解释:
节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
节点 4 的值是 4,它有两个邻居:节点 1 和 3 。

提示:

  1. 节点数介于 1 到 100 之间。

  2. 无向图是一个简单图
    ,这意味着图中没有重复的边,也没有自环。

  3. 由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。

  4. 必须将给定节点的拷贝 作为对克隆图的引用返回。


思路:

这是一个带有环的图,因此hash必须在执行遍历neighbors之前保存当前的copy Node,这样后面如果遇到循环引用,也能引用到hash里的copy Node

遍历neighbors并且填充copy Node.neighbors

/**
 * @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * // Definition for a Node.
 * function Node(val,neighbors) {
 *    this.val = val;
 *    this.neighbors = neighbors;
 * };
 */
/**
 * @param {Node} node
 * @return {Node}
 */
var cloneGraph = function(node) {
  let hash={}
  function clone(node){
    let val=node.val,adj=node.neighbors
    if(hash[val])return hash[val]
    let copy=new Node(val,[])
    hash[val]=copy
    for(let i=0;i<adj.length;i++){
      copy.neighbors[i]=clone(adj[i])
    }
    return copy
  }
  return clone(node)

};

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:LeetCode 133. 克隆图

链接:https://www.javascriptc.com/4497.html

« LeetCode 134. 加油站
Js中文网周刊第104期»
Flutter 中文教程资源

相关推荐

QR code