LeetCode 1306. 跳跃游戏 III
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相关推荐
- LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)
1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处. 当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够 ...
- [leetcode]1306. 跳跃游戏 III
DFS解法 class Solution {vector<bool>visited;vector<int>arr;int len; public:bool DFS(int po ...
- leetcode 1306. Jump Game III | 1306. 跳跃游戏 III(BFS)
题目 https://leetcode.com/problems/jump-game-iii/ 题解 正如 hint 所说: 用 BFS,跳过的就不跳了,直到全部跳过,即 count == arr.l ...
- 1306. 跳跃游戏 III
没什么难度 #include <stdc++.h>using namespace std; bool canReach(const vector<int>& arr, ...
- LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)
文章目录 1. 题目 2. 解题 2.1 贪心错误解 2.2 优先队列/单调队列 1. 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k . 一开始你在下标 0 处.每一步,你最多可 ...
- LeetCode 1340. 跳跃游戏 V(DP)
1. 题目 给你一个整数数组 arr 和一个整数 d .每一步你可以从下标 i 跳到: i + x ,其中 i + x < arr.length 且 0 < x <= d . i - ...
- LeetCode 45. 跳跃游戏 II(贪心/BFS,难)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 BFS 1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的 ...
- LeetCode 55. 跳跃游戏(贪心)
1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1:输入: [2,3,1,1,4] 输出: ...
- Leetcode之跳跃游戏整理
1306. 跳跃游戏 III 题目: 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处.当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i] ...
最新文章
- Python零基础入门(3)——常用操作符介绍
- 简单的分页控件(原创)
- nginx访问控制:如何通过map来控制http_x_forwarded_for访问限制
- oracle 动态注册和静态注册
- rest api如何创建_REST:创建资源
- unit类型是什么?_项目中有用过锁吗?能解释一下什么是AQS(AbstractQueuedSynchronizer)吗?...
- java如何添加进程_如何创建一个进程,如何进程调用进程
- 前后台字符串进行交互
- 数据--第52课 - 哈希表及其实现
- ImageJ Merge荧光图片
- threejs写的模仿微信跳一跳游戏
- Unhandled exception at 0x000007FEFD19A06D in test.exe: Microsoft C++ exception: cv::Exception at mem
- 电子厂里撂了挑子,我默默自学起了Android|2021年中总结
- 教你用VS Code插件实现五彩斑斓的伪代码
- 国内首笔!蚂蚁金服完成全流程零人工干预 AI 保险理赔
- bat遍历所有子文件和文件夹,修改后缀名,亲测有效果(原创)
- 什么是激光波长、激光功率和激光亮度?
- 自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0
- root账号无法通过SSH登录阿里云ECS
- 云图(词云图)实现方式