题目描述

有 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 <= rooms.length <= 1000
0 <= rooms[i].length <= 1000
所有房间中的钥匙数量总计不超过 3000。

示例

  • 示例 1:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/robot-return-to-origin


虽然归类为中等题型,但是意外地简单。类似链式结构,房间代表链表的节点,钥匙代表指向的下一节点。

首先想到的就是递归, 构造递归函数lock, 开锁即进入房间。没去过的房间进行递归操作,否则不重复进入。

最后, 根据房间的数量和已使用钥匙集合的数量判断,若房间数大于钥匙数,则有没去过的房间, 返回False.

  • 题解1:

    执行用时:88ms,在所有Python3提交中击败了53.68%的用户

    内存消耗:14.5MB,在所有Python3提交中击败了13.44%的用户

    class Solution:
    def canVisitAllRooms(self, rooms) -> bool:used_key = set()used_key.add(0)s_len = len(rooms)def lock(keys):if keys:for key in keys:if key in used_key:continueelse:used_key.add(key)lock(rooms[key])for index, room in enumerate(rooms):if room and index in used_key:lock(room)return True if s_len <= len(used_key) else False
    

leetcode-841-钥匙和房间 题解相关推荐

  1. LeetCode 841. 钥匙和房间(DFS/BFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,-,N-1,并且房间里可能有一些钥匙能使你进入 ...

  2. C++性能之战(4)--LeetCode 841 钥匙和房间(cin和cout加速)

    希望大家收藏: 本文持续更新地址:https://haoqchen.site/2018/09/04/LeetCode841/ 今天刷841的时候看到一个大神写的巨高级的代码.在这里分享以下.这位大神用 ...

  3. 841. 钥匙和房间

    链接:841. 钥匙和房间 题解: class Solution {public:bool canVisitAllRooms(vector<vector<int>>& ...

  4. BFS广度优先搜索之钥匙和房间

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

  5. 刷题记录:广搜 | leetcode-841. 钥匙和房间 2023/6/5

    841. 钥匙和房间 今天挑一个广搜的题目做一下. 其实我广搜的题熟练度一般/(ㄒoㄒ)/~~ 主要还是太久没做了-- 这个题目不是很难,非常适合寻找手感-- 这里先贴上别的大佬整理的知识点讲解: 知 ...

  6. 多益网络2019校招—钥匙和房间问题

    时间:20180906 题目描述 : LeetCode 841. Keys and Rooms 有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,...,N-1,并且房间里可 ...

  7. LeetCode第 227 场周赛题解

    LeetCode第 227 场周赛题解 检查数组是否经排序和轮转得到 原题链接 https://leetcode-cn.com/problems/check-if-array-is-sorted-an ...

  8. LeetCode 399 除法求值 题解

    LeetCode 399 除法求值 题解 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[ ...

  9. 算法刷题-钥匙与房间

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

  10. [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]

    [问题描述][中等] [解答思路] 当 xx 号房间中有 yy 号房间的钥匙时,我们就可以从 xx 号房间去往 yy 号房间.如果我们将这 nn 个房间看成有向图中的 nn 个节点,那么上述关系就可以 ...

最新文章

  1. 支付领域的未来与生物识别息息相关
  2. 请问如何在出错后能恢复到改变设置前的状态?
  3. [转]symbian基本类型转换
  4. X.509证书的介绍
  5. “指定的文件名无效或太长” 无法拷贝,咋办
  6. vue双向数据绑定v-model绑定单选框,复选框,下拉框
  7. IE10兼容性故障的解决办法
  8. Python正则表达式常用flag含义与用法详解
  9. JVM学习手册(X):查看堆内存使用情况以及排错
  10. 解决sublime text 3使用Install Package时出现There are no packages available for installation问题
  11. 计算机数值方法知识点,数值分析 全部 知识点.docx
  12. Java后端开发常用规范
  13. echarts地图示例
  14. 机器学习算法 07 —— 朴素贝叶斯算法(拉普拉斯平滑系数、商品评论情感分析案例)
  15. qq邮箱收不到通知邮件的解决方法
  16. 双硬盘安装ubuntu
  17. win10专业版和企业版的区别_Win10专业版和家庭版有什么区别?
  18. php 关于php时区时间错误问题 date 当前时间 时差(转载)
  19. 大白菜重装完系统后出现双系统怎么办
  20. 《小狗钱钱》思维导图

热门文章

  1. 强化学习入门项目 Spinning up OpenAI (2) 基本使用
  2. html5 图片粒子效果,Canvas + JavaScript 制作图片粒子效果
  3. 为什么空调能制冷和滴水?
  4. 不懂中医的才攻击中医
  5. 【沉浸式腾讯云服务器部署安装docker】
  6. 我的世界android启动器,我的世界手机版启动器 安卓方块启动器教程
  7. nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
  8. Android发送短信SMS的编程
  9. 带动画的好看的按钮集合HTML + CSS各种好看按钮组件
  10. C++ sort排序函数用法