Skip to content

Commit c0ae96b

Browse files
committed
solve
1 parent 3e0dc3e commit c0ae96b

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

clone-graph/sonjh1217.swift

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Definition for a Node.
3+
* public class Node {
4+
* public var val: Int
5+
* public var neighbors: [Node?]
6+
* public init(_ val: Int) {
7+
* self.val = val
8+
* self.neighbors = []
9+
* }
10+
* }
11+
*/
12+
13+
class Solution {
14+
// O(V+E) time / O(V) space
15+
func cloneGraph(_ node: Node?) -> Node? {
16+
guard let node = node else {
17+
return nil
18+
}
19+
var newNodeByVal = [Int: Node]()
20+
return copy(node: node, newNodeByVal: &newNodeByVal)
21+
}
22+
23+
func copy(node: Node, newNodeByVal: inout [Int: Node]) -> Node {
24+
if let node = newNodeByVal[node.val] {
25+
return node
26+
}
27+
var newNode = Node(node.val)
28+
newNodeByVal[node.val] = newNode
29+
30+
for neighbor in node.neighbors {
31+
guard let neighbor = neighbor else {
32+
continue
33+
}
34+
let newNeighbor = copy(node: neighbor, newNodeByVal: &newNodeByVal)
35+
newNode.neighbors.append(newNeighbor)
36+
}
37+
return newNode
38+
}
39+
}

0 commit comments

Comments
 (0)