内容简介:题目地址:题目描述:
题目地址:
https://leetcode-cn.com/probl...
题目描述:
给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node])。
提示:
节点数介于 1 到 100 之间。
无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
必须将给定节点的拷贝作为对克隆图的引用返回。
解答:
首先解释一下,深拷贝的意思是,一个节点,若对它进行深拷贝,那么必然生成一个新的节点,这个节点的所有的属性值和原节点相同,但是这两个节点在内存中是两个不同的对象,这样称之为深拷贝。
这一题的做法是,使用一个hashmap来记录,原node 和 新node的对应关系。
若原node已经作为key存在于hashmap里,那么说明它的拷贝(新node)也
已经存在,那么直接获得它的拷贝,否则,就要为这个node生成新的拷贝
然后,把拷贝放入hashmap中, 并且使得拷贝(新node)的邻接链表添加原node的邻接链表里元素的拷贝 。
话比较绕,看代码就懂了!!!
java ac代码:
/* // Definition for a Node. class Node { public int val; public List<Node> neighbors; public Node() {} public Node(int _val,List<Node> _neighbors) { val = _val; neighbors = _neighbors; } }; */ class Solution { HashMap<Node,Node>map = new HashMap(); public Node cloneGraph(Node node) { if(node == null)return null; if(map.containsKey(node)) return map.get(node); Node newnode = new Node(node.val,null); map.put(node,newnode); if(node.neighbors != null){ newnode.neighbors = new ArrayList(); for(Node nn:node.neighbors) newnode.neighbors.add(cloneGraph(nn)); } return newnode; } }
以上所述就是小编给大家介绍的《力扣(LeetCode)133》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员成长的烦恼
吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元
还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!