原题
133.克隆图
2020年8月12日 每日一题
连通 深拷贝 简单图
题解
方法一
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
*/
/*
@lc
执行用时:36 ms, 在所有 Java 提交中击败了80.43%的用户
内存消耗:39.7 MB, 在所有 Java 提交中击败了91.63%的用户
2020年8月12日 8:49
*/
class Solution {
Map<Node,Node> map=new HashMap<>();
public Node cloneGraph(Node node) {
if(node!=null){
if(map.containsKey(node)){
return map.get(node);
}
Node fuzhi=new Node(node.val,new ArrayList<>());
map.put(node,fuzhi);
for(Node linju:node.neighbors){
fuzhi.neighbors.add(cloneGraph(linju));
}
return fuzhi;
}
return null;
}
}
方法二
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
*/
/*
@lc
执行用时:41 ms, 在所有 Java 提交中击败了16.88%的用户
内存消耗:39.8 MB, 在所有 Java 提交中击败了82.54%的用户
2020年8月12日 10:57
*/
class Solution {
public Node cloneGraph(Node node) {
if(node!=null){
Map<Node,Node> map=new HashMap<>();
List<Node> list=new ArrayList<>();
list.add(node);
map.put(node,new Node(node.val,new ArrayList<>()));
while(list.size()>0){
Node m=list.remove(0);
for(Node linju:m.neighbors){
if(!map.containsKey(linju)){
map.put(linju,new Node(linju.val,new ArrayList<>()));
list.add(linju);
}
map.get(m).neighbors.add(map.get(linju));
}
}
return map.get(node);
}
return node;
}
}