LeedCode钥匙与房间问题

题目

        有 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。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/keys-and-rooms

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答及思路

源码

class Solution {

    public boolean canVisitAllRooms(List<List<Integer>> rooms) {

        int roomNum = rooms.size();

        Queue<Integer> keys = new LinkedList<>();

        keys.offer(0);

        HashSet<Integer> roomOpen = new HashSet();

        while(!keys.isEmpty()){

            int key = keys.peek();

            keys.poll();

            roomOpen.add(key);

            List<Integer> newKeys = rooms.get(key);

            for(int newKey:newKeys){

                if (!roomOpen.contains(newKey)){

                    keys.offer(newKey);

                }

            }

        }

        return roomNum==roomOpen.size();

        }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容