原始题目链接可以参考如下链接 某厂机试算法刷题一览_@_南先森的博客-CSDN博客
在阅读代码时,建议拷贝到idea或者eclipse里面看,为了便于理解代码,注释比较多,
在阅读代码时,可以先删掉注释
这个题目需要用到栈做广度优先搜索,解题主要有以下几个要点
1:要找到没有依赖关系的数字作为起始数字,从起始数字出发
像多米诺骨牌一样往后面的数字传递,依次解锁后面数字
2:使用Map<Integer, List<Integer>>数据结构来记录
数字之间的依赖关系,value依赖key
3:需要用到Stack,可以解锁的数字入栈,用出栈来模拟解锁过程

public class Demo107 {//测试代码public static void main(String[] args) {int n = 6;int[][] grids = {{0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}};boolean r = skipGrid(n, grids);System.out.println(r);}/** n代表总共几个数字* grids存放每一行的两个数字* 举个例子,如果用户输入下面的数据* 2* 1 0* 0 1* 那么n = 2  grids = {{1,0},{0,1}}**/public static boolean skipGrid(int n, int[][] grids) {/**  x数组的设计很有讲究,其索引代表需要解锁的数字,其值代表依赖数字*  如国值为null,说明当前数字无依赖数字,可以直接解锁,下面举2个例子*  便于理解*  如果用户输入*  2*  1 0*  0 1*  那么x=[1,0]*  观察上面的数据,可以看到 x[0] = 1; x[1] = 0*  以上是索引0依赖数字1,索引1依赖数字0*  再举个例子*  3*  0 1*  0 2*  则x=[null,0,0]*  观察上面的数据,可以看到 x[0] = null; x[1] = 0; x[2] = 0*  说明索引0没有依赖数字,可以直接解锁.而索引1,2都依赖0**/Integer[] x = new Integer[n];// key和value都存放的是数字,key可以解锁valueMap<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < grids.length; i++) {int[] a = grids[i];List<Integer> list = map.getOrDefault(a[0], new ArrayList<>());list.add(a[1]);map.put(a[0], list);// 理解了上面的注释,这行代码就好理解,简单说,就是记录索引依赖的数字x[a[1]] = a[0];}Stack<Integer> stack = new Stack<>();//值为空的找出来,值为空说明没有依赖关系,可以直接解锁for (int i = 0; i < x.length; i++) {if (x[i] == null) {stack.add(i);}}//如果所有的数字都有依赖关系,说明没法解锁if (stack.isEmpty()) {return false;}while (!stack.isEmpty()) {// 一个个弹出,然后赋值为-1,代表已经解锁过了.后面不要重复访问解锁过的元素int index = stack.pop();x[index] = -1;// 获取以index为前提条件的数字,因为index解锁了,那么以index为前提条件的数字也可以解锁List<Integer> list = map.get(index);if (list == null) {continue;}list.forEach(item -> {// 等于 -1说明已经解锁过了,不需要重复解锁,避免死循环if (x[item] != -1) {stack.add(item);}});}for (int i = 0; i < x.length; i++) {if (x[i] != -1) {return false;}}return true;}
}

华为OD机试107-跳格子游戏相关推荐

  1. 华为OD机试 - 密室逃生游戏(Python)

    密室逃生游戏 题目 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码 K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符 ...

  2. 华为OD机试 - 密室逃生游戏(Java JS Python)

    题目描述 小强正在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符串s ,字符串 ...

  3. 华为OD机试 - 密室逃生游戏(Java) | 机试题+算法思路+考点+代码解析 【2023】

    密室逃生游戏 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符串s , ...

  4. 华为OD机试真题大全完整目录

    华为OD机试真题大全完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:华为OD机试真题大全 数量:406篇博文(2023年5月16日截止) 更新时间至:2023年5月16日(后续加上去的博文,会每 ...

  5. 【华为OD机试真题 JAVA】跳格子游戏

    JS版:[华为OD机试真题 JS]跳格子游戏 标题:跳格子游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关 ...

  6. 【华为OD机试真题 C++】单词搜索 - 找到它游戏

    前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...

  7. 【华为OD机试真题 JAVA】报数游戏

    JS版:[华为OD机试真题 JS]报数游戏 标题:报数游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 100个人围成一圈,每个人有一个编码,编号从1开始到100.他们从1开 ...

  8. 【100%通过率】华为OD机试C++/python【密室逃生游戏】【2022.11 Q4 新题|100分】

    华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! 题目描述 小强在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母 ...

  9. 【华为OD机试真题 Python】单词搜索 - 找到它游戏

    前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...

最新文章

  1. java Timer定时器管理类
  2. 以后开药的时候,最后一定问一句,哪些药有激素
  3. c++ 虚继承与继承的差异
  4. 一个java文件中可包含多个main方法
  5. [单刷 APUE 系列] 第十四章——高级 I/O
  6. 使用IDEA的Spring Initializr创建SpringBoot工程
  7. Open Source Blog 开源ASP.NET/C# 博客平台 v2.5 发布(提供源码下载)
  8. java.util.timertask_java.util.TimerTask翻译
  9. linux chromebook arm,第一款可拆卸 ARM Chromebook 可能是 KODAMA
  10. SUN:开源在Web2.0时代
  11. 如何在ASP.NET Core中上传文档
  12. 《Cassandra权威指南》第二版书评及访谈
  13. 【翻译】Geometric Features-Based Parking Slot Detection
  14. 本特利探头177230-01-02-CN
  15. 深度学习视频压缩3——M-LVC: Multiple Frames Prediction for Learned Video Compression
  16. 动态规划——1292:宠物小精灵之收服(二维背包问题)
  17. 用python画玫瑰花
  18. 关于系统架构你不知道的那些事-架构设计流程:设计备选方案
  19. excel插件开发,Smartbi免费版安装流程
  20. 华为虚拟服务器忘记密码,华为云服务器忘记密码了怎么办

热门文章

  1. android模拟遥控器home点击
  2. 【小李木耳】2012年5月高兴事:哈尔滨集散中心成立、商标正式申请!
  3. 总结运用kali破解WIFI密码的多种方法
  4. 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...
  5. 犯罪嫌疑人X的献身和三体
  6. 中国InGaAs APD模块市场深度研究分析报告
  7. 6.3 由学得用——《逆袭大学》连载
  8. 博客搬家去cnblogs
  9. 【实战】如何避免背锅?
  10. php开源文档共享,几款常见的PHP开源文档管理系统介绍_PHP教程