【力扣】133. 克隆圖
給你無向連通圖中一個節點的引用,請你返回該圖的深拷貝(克隆)。
圖中的每個節點都包含它的值 val(int) 和其鄰居的列表(list[Node])。
class Node {
public int val;
public List<Node> neighbors;
}測試用例格式:
簡單起見,每個節點的值都和它的索引相同。例如,第一個節點值為 1(val = 1),第二個節點值為 2(val = 2),以此類推。該圖在測試用例中使用鄰接列表表示。
鄰接列表 是用於表示有限圖的無序列表的集合。每個列表都描述了圖中節點的鄰居集。
給定節點將始終是圖中的第一個節點(值為 1)。你必須將給定節點的拷貝作為對克隆圖的引用返回。
示例 1:
輸入:adjList = [[2,4],[1,3],[2,4],[1,3]]
輸出:[[2,4],[1,3],[2,4],[1,3]]
解釋:
圖中有 4 個節點。
節點 1 的值是 1,它有兩個鄰居:節點 2 和 4 。
節點 2 的值是 2,它有兩個鄰居:節點 1 和 3 。
節點 3 的值是 3,它有兩個鄰居:節點 2 和 4 。
節點 4 的值是 4,它有兩個鄰居:節點 1 和 3 。
示例 2:輸入:adjList = [[]]
輸出:[[]]
解釋:輸入包含一個空列表。該圖僅僅只有一個值為 1 的節點,它沒有任何鄰居。
示例 3:輸入:adjList = []
輸出:[]
解釋:這個圖是空的,它不含任何節點。示例 4:輸入:adjList = [[2],[1]]
輸出:[[2],[1]]提示:
節點數不超過 100 。
每個節點值Node.val 都是唯一的,1 <= Node.val <= 100。
無向圖是一個簡單圖,這意味著圖中沒有重複的邊,也沒有自環。
由於圖是無向的,如果節點 p 是節點 q 的鄰居,那麼節點 q 也必須是節點 p的鄰居。
圖是連通圖,你可以從給定節點訪問到所有節點。來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/clone-graph
class Solution { HashMap <Integer, Node> visited = newHashMap <> (); //遍歷圖 public Node cloneGraph(Node node) { if(node == null){ return null; } if(visited.containsKey(node.val)){ return visited.get(node.val); } Node current = new Node(node.val,new ArrayList<Node>()); visited.put(current.val,current); for(Node temp : node.neighbors){ current.neighbors.add(cloneGraph(temp)); } return current; } }
時間複雜度和空間複雜度都是O(n)