Skip to content

Commit a8db596

Browse files
committed
Sync LeetCode submission Runtime - 48 ms (20.54%), Memory - 18 MB (61.63%)
1 parent ce8472f commit a8db596

File tree

1 file changed

+21
-24
lines changed

1 file changed

+21
-24
lines changed

0133-clone-graph/solution.py

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
# Approach 2 - Breadth First Search
1+
# Approach 1: Depth First Search
22

3-
# Time: O(N + M), N = no. of nodes, M = no. of edges
4-
# Space: O(N)
3+
# n = no. of nodes, m = no. of edges
4+
# Time: O(n + m)
5+
# Space: O(n)
56

67
"""
78
# Definition for a Node.
@@ -11,28 +12,24 @@ def __init__(self, val = 0, neighbors = None):
1112
self.neighbors = neighbors if neighbors is not None else []
1213
"""
1314

14-
from collections import deque
15-
15+
from typing import Optional
1616
class Solution:
17-
def cloneGraph(self, node: 'Node') -> 'Node':
17+
def __init__(self):
18+
self.visited = {} # {node: clone_node}
19+
20+
def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
1821
if not node:
1922
return node
20-
21-
visited = {} # node: clone
22-
23-
queue = deque([node])
24-
25-
visited[node] = Node(node.val, [])
26-
27-
while queue:
28-
n = queue.popleft()
29-
30-
for neighbor in n.neighbors:
31-
if neighbor not in visited:
32-
visited[neighbor] = Node(neighbor.val, [])
33-
queue.append(neighbor)
34-
35-
visited[n].neighbors.append(visited[neighbor])
36-
37-
return visited[node]
23+
24+
if node in self.visited:
25+
return self.visited[node]
26+
27+
clone_node = Node(node.val, [])
28+
29+
self.visited[node] = clone_node
30+
31+
if node.neighbors:
32+
clone_node.neighbors = [self.cloneGraph(n) for n in node.neighbors]
33+
34+
return clone_node
3835

0 commit comments

Comments
 (0)