LeetCode 1306. 跳跃游戏 III

  • 题目说明
    • 方法一:带辅助数组的dfs
    • 方法二:不带辅助数组的dfs

题目说明

这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。
请你判断自己是否能够跳到对应元素值为 0 的任一下标处。
注意,不管是什么情况下,你都无法跳到数组之外。

来源:力扣(LeetCode)
题目链接

方法一:带辅助数组的dfs

只要找到一个为0的值就可以,所以可以采用dfs,然后利用一个辅助数组visited记录某个索引值是否被访问。
递归终止条件即 arr[index] == 0,不满足终止条件则分别向左和向右继续递归。

class Solution {public boolean canReach(int[] arr, int start) {int[] visited = new int[arr.length];return backtrack(arr, visited, start);}private boolean backtrack(int[] arr, int[] visited, int index){if(arr[index] == 0){return true;}Boolean res = false;int left = index - arr[index];int right = index + arr[index];visited[index] = 1;if(left >= 0 && visited[left] == 0){res = res || backtrack(arr, visited, left);}if(right < arr.length && visited[right] == 0){res = res || backtrack(arr, visited, right);}return res;}
}

方法二:不带辅助数组的dfs

看了评论区一位老哥的答案,发现方法一可以被优化。
因为arr是非负整数数组,所以可以直接将访问过的索引值置-1,节省掉了辅助数组的空间。

class Solution {public boolean canReach(int[] arr, int start) {return dfs(arr, start);}private boolean dfs(int[] arr, int st) {if (st < 0 || st >= arr.length || arr[st] == -1)return false;int step = arr[st];arr[st] = -1;return step == 0 || dfs(arr, st + step) || dfs(arr, st - step);}
}

LeetCode 1306. 跳跃游戏 III相关推荐

  1. LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

    1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处. 当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够 ...

  2. [leetcode]1306. 跳跃游戏 III

    DFS解法 class Solution {vector<bool>visited;vector<int>arr;int len; public:bool DFS(int po ...

  3. leetcode 1306. Jump Game III | 1306. 跳跃游戏 III(BFS)

    题目 https://leetcode.com/problems/jump-game-iii/ 题解 正如 hint 所说: 用 BFS,跳过的就不跳了,直到全部跳过,即 count == arr.l ...

  4. 1306. 跳跃游戏 III

    没什么难度 #include <stdc++.h>using namespace std; bool canReach(const vector<int>& arr, ...

  5. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)

    文章目录 1. 题目 2. 解题 2.1 贪心错误解 2.2 优先队列/单调队列 1. 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k . 一开始你在下标 0 处.每一步,你最多可 ...

  6. LeetCode 1340. 跳跃游戏 V(DP)

    1. 题目 给你一个整数数组 arr 和一个整数 d .每一步你可以从下标 i 跳到: i + x ,其中 i + x < arr.length 且 0 < x <= d . i - ...

  7. LeetCode 45. 跳跃游戏 II(贪心/BFS,难)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 BFS 1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的 ...

  8. LeetCode 55. 跳跃游戏(贪心)

    1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1:输入: [2,3,1,1,4] 输出: ...

  9. Leetcode之跳跃游戏整理

    1306. 跳跃游戏 III 题目: 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处.当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i] ...

最新文章

  1. Python零基础入门(3)——常用操作符介绍
  2. 简单的分页控件(原创)
  3. nginx访问控制:如何通过map来控制http_x_forwarded_for访问限制
  4. oracle 动态注册和静态注册
  5. rest api如何创建_REST:创建资源
  6. unit类型是什么?_项目中有用过锁吗?能解释一下什么是AQS(AbstractQueuedSynchronizer)吗?...
  7. java如何添加进程_如何创建一个进程,如何进程调用进程
  8. 前后台字符串进行交互
  9. 数据--第52课 - 哈希表及其实现
  10. ImageJ Merge荧光图片
  11. threejs写的模仿微信跳一跳游戏
  12. Unhandled exception at 0x000007FEFD19A06D in test.exe: Microsoft C++ exception: cv::Exception at mem
  13. 电子厂里撂了挑子,我默默自学起了Android|2021年中总结
  14. 教你用VS Code插件实现五彩斑斓的伪代码
  15. 国内首笔!蚂蚁金服完成全流程零人工干预 AI 保险理赔
  16. bat遍历所有子文件和文件夹,修改后缀名,亲测有效果(原创)
  17. 什么是激光波长、激光功率和激光亮度?
  18. 自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0
  19. root账号无法通过SSH登录阿里云ECS
  20. 云图(词云图)实现方式

热门文章

  1. csv表格导入mysql数据库出现报错
  2. C语言 运算符、表达式
  3. Paraview源码解析3:vtkAlgorithm类
  4. JRebel本地激活方式
  5. 至少连接一个aura sync兼容设备_TE Connectivity推出四款大电流金手指电源连接器
  6. 第一次申请加薪,我是如何实现涨幅超30%的?
  7. 怎么解决电脑频繁死机?
  8. 如何使用CPU导热膏?CPU散热膏正确涂抹使用方法
  9. 有感于湖南卫视在宁波消失
  10. 计算机专业允许纹身吗,考事业单位有纹身没事吧??