首页 > 其他分享 >Leetcode 841. 钥匙和房间

Leetcode 841. 钥匙和房间

时间:2024-05-27 13:02:39浏览次数:11  
标签:841 房间 dfs st 钥匙 rooms true Leetcode

有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。

当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。你可以拿上所有钥匙去解锁其他房间。

给你一个数组 rooms 其中 rooms[i] 是你进入 i 号房间可以获得的钥匙集合。如果能进入 所有 房间返回 true,否则返回 false。

示例 1:

输入:rooms = [[1],[2],[3],[]]
输出:true
解释:
我们从 0 号房间开始,拿到钥匙 1。
之后我们去 1 号房间,拿到钥匙 2。
然后我们去 2 号房间,拿到钥匙 3。
最后我们去了 3 号房间。
由于我们能够进入每个房间,我们返回 true。
示例 2:

输入:rooms = [[1,3],[3,0,1],[2],[0]]
输出:false
解释:我们不能进入 2 号房间。

提示:

n == rooms.length
2 <= n <= 1000
0 <= rooms[i].length <= 1000
1 <= sum(rooms[i].length) <= 3000
0 <= rooms[i][j] < n
所有 rooms[i] 的值 互不相同

思路:就是给一个有向图,看从起点能不能到达每个点。遍历一遍就行。

class Solution {
public:
    int n;
    vector<vector<int>> g;
    vector<bool> st;

    void dfs(int u) {
        st[u] = true;
        for(auto& v : g[u])
            if(!st[v])
                dfs(v);
    }

    bool canVisitAllRooms(vector<vector<int>>& rooms) {
        g = rooms;
        n = g.size();
        st.resize(n);

        dfs(0);

        for(int i = 0; i < n; i ++ )
            if(!st[i])
                return false;
        return true;
    }
};

标签:841,房间,dfs,st,钥匙,rooms,true,Leetcode
From: https://blog.csdn.net/qq_45281807/article/details/139231002

相关文章

  • Leetcode 463. 岛屿的周长
    给定一个rowxcol的二维网格地图grid,其中:grid[i][j]=1表示陆地,grid[i][j]=0表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖”......
  • Leetcode 1971. 寻找图中是否存在路径
    有一个具有n个顶点的双向图,其中每个顶点标记从0到n-1(包含0和n-1)。图中的边用一个二维整数数组edges表示,其中edges[i]=[ui,vi]表示顶点ui和顶点vi之间的双向边。每个顶点对由最多一条边连接,并且没有顶点存在与自身相连的边。请你确定是否存在从......
  • Leetcode 684. 冗余连接
    树可以看成是一个连通且无环的无向图。给定往一棵n个节点(节点值1~n)的树中添加一条边后的图。添加的边的两个顶点包含在1到n中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为n的二维数组edges,edges[i]=[ai,bi]表示图中在ai和bi之间......
  • LeetCode刷题之HOT100之两数相加
    2024/5/27大家早上好呀,昨晚没睡好,四个小时不到,估计是太兴奋了。昨天去长乐十七孔、下沙赶海啦。远看沙滩上的人群就像一根根木桩矗立在浅滩上,走近些,才发现都佝偻着腰,两只手在沙地淘金(摸花蛤)。放几张图图一、十七孔水库附近图二、十七孔——右侧礁石是妈祖像图三、追......
  • Leetcode1953. 你可以工作的最大周数
    EverydayaLeetcode题目来源:1953.你可以工作的最大周数类似题目:621.任务调度器解法1:贪心本质上来说,我们需要构造一个尽量长的,相邻元素不同的序列,且元素x的出现次数不能超过milestones[x]。设milestones的元素和为s,这是序列长度的上界。设mx=max⁡(milestone......
  • leetcode力扣 300. 最长递增子序列
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101......
  • 【leetcode 找出第 K 大的异或坐标值]
    前缀和+最小堆importjava.util.PriorityQueue;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();solution.kthLargestValue(newint[][]{{5,2},{1,6}},4);}......
  • 【leetcode 399 周赛】【题解】
    第一题和第三题一样。就是求约数第二题就是模拟第4题使用线段树1,3题代码实际上发现没有下面代码的负载,比如:a*b=n,枚举a就好,a在[1,sqrt(n)内。importjava.util.*;classSolution{publicintnumberOfPairs(int[]nums1,int[]nums2,intk){......
  • 【Leetcode 每日一题】28. 找出字符串中第一个匹配项的下标
    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6......
  • leetcode力扣 1004. 最大连续1的个数 III
    给定一个二进制数组nums和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。示例1:输入:nums=[1,1,1,0,0,0,1,1,1,1,0],k=2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1],翻转两个0后,最长的子数组长度为6。示例2:输入:nums=[0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1......