难度:Medium
题目描述
有N个房间,开始时你位于0号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。
在形式上,对于每个房间i都有一个钥匙列表rooms[i],每个钥匙rooms[i][j]由[0,1,…,N-1]中的一个整数表示,其中N=rooms.length。 钥匙rooms[i][j]=v可以打开编号为v的房间。
最初,除0号房间外的其余所有房间都被锁住。
你可以自由地在房间之间来回走动。
如果能进入每个房间返回true,否则返回false。
示例
示例1
1 | 输入: [[1],[2],[3],[]] |
示例2
1 | 输入:[[1,3],[3,0,1],[2],[0]] |
提示
- 1 <= rooms.length <= 1000
- 0 <= rooms[i].length <= 1000
- 所有房间中的钥匙数量总计不超过3000。
解题思路
这个题目其实整体来看是一个图,房间就是图中的点,钥匙就是一个点到另一个点的有向边。最后就是找出哪个点没有访问到。这个我们很容易想到用深度优先遍历来做。
具体参见代码。
解题代码
1 | class Solution { |