-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkeys-and-rooms_841.py
40 lines (29 loc) · 1.5 KB
/
keys-and-rooms_841.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# There are n rooms labeled from 0 to n - 1 and all the rooms are locked except for room 0. Your goal is to visit all the rooms. However, you cannot enter a locked room without having its key.
# When you visit a room, you may find a set of distinct keys in it. Each key has a number on it, denoting which room it unlocks, and you can take all of them with you to unlock the other rooms.
# Given an array rooms where rooms[i] is the set of keys that you can obtain if you visited room i, return true if you can visit all the rooms, or false otherwise.
# Example 1:
# Input: rooms = [[1],[2],[3],[]]
# Output: true
# Explanation:
# We visit room 0 and pick up key 1.
# We then visit room 1 and pick up key 2.
# We then visit room 2 and pick up key 3.
# We then visit room 3.
# Since we were able to visit every room, we return true.
# Example 2:
# Input: rooms = [[1,3],[3,0,1],[2],[0]]
# Output: false
# Explanation: We can not enter room number 2 since the only key that unlocks it is in that room.
# ---------------------------------------Runtime 67 ms Beats 83.66% Memory 16.8 MB Beats 71.15%---------------------------------------
from collections import deque
# Time Complexity O(n * k)
class Solution:
def canVisitAllRooms(self, rooms: list[list[int]]) -> bool:
deq = deque([0])
visited = set()
while deq:
ind = deq.popleft()
if ind not in visited:
deq.extend(rooms[ind])
visited.add(ind)
return len(visited) == len(rooms)