Skip to content

Latest commit

 

History

History
78 lines (57 loc) · 3.11 KB

841.Keys_and_Rooms(Medium).md

File metadata and controls

78 lines (57 loc) · 3.11 KB

841. Keys and Rooms (Medium)

Date and Time: Sep 17, 2024, 12:52 (EST)

Link: https://leetcode.com/problems/keys-and-rooms/


Question:

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.


Constraints:

  • n == rooms.length

  • 2 <= n <= 1000

  • 0 <= rooms[i].length <= 1000

  • 1 <= sum(rooms[i].length) <= 3000

  • 0 <= rooms[i][j] < n

  • All the values of rooms[i] are unique.


Walk-through:

  1. Use visited() a set to store all the rooms we visited already, target is the total number of rooms we should visit.

  2. We run dfs on each room's keys and append the key into visited(), and compare if len(visited) == targets.


Python Solution:

class Solution:
    def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
        visited = set()
        def dfs(i):
            if i not in visited:
                visited.add(i)
                for key in rooms[i]:
                    dfs(key)
        dfs(0)
        return len(visited) == len(rooms)

Time Complexity: $O(n)$, n is the length of rooms.
Space Complexity: $O(n)$


CC BY-NC-SABY: credit must be given to the creatorNC: Only noncommercial uses of the work are permittedSA: Adaptations must be shared under the same terms