0
点赞
收藏
分享

微信扫一扫

LeetCode-1306. Jump Game III

巧乐兹_d41f 2022-08-10 阅读 33


Given an array of non-negative integers ​​arr​​​, you are initially positioned at ​​start​​​ index of the array. When you are at index ​​i​​​, you can jump to ​​i + arr[i]​​​ or ​​i - arr[i]​​, check if you can reach to any index with value 0.

Notice that you can not jump outside of the array at any time.

 

Example 1:

Input: arr = [4,2,3,0,3,1,2], start = 5
Output: true
Explanation:
All possible ways to reach at index 3 with value 0 are:
index 5 -> index 4 -> index 1 -> index 3
index 5 -> index 6 -> index 4 -> index 1 -> index 3

Example 2:

Input: arr = [4,2,3,0,3,1,2], start = 0
Output: true
Explanation:
One possible way to reach at index 3 with value 0 is:
index 0 -> index 4 -> index 1 -> index 3

Example 3:

Input: arr = [3,0,2,1,2], start = 2
Output: false
Explanation: There is no way to reach at index 1 with value 0.

 

Constraints:

  • ​1 <= arr.length <= 5 * 10^4​
  • ​0 <= arr[i] < arr.length​
  • ​0 <= start < arr.length​

题解:

class Solution {
public:
void dfs(vector<int> &arr, int k, int left, int right, bool &res) {
if (k >= left && k < right) {
if (res == true || arr[k] == 0) {
res = true;
return;
}
else if (arr[k] != -1) {
int next[2] = {k + arr[k], k - arr[k]};
int tmp = arr[k];
arr[k] = -1;
for (int i = 0; i < 2; i++) {
dfs(arr, next[i], left, right, res);
}
arr[k] = tmp;
}
}
}
bool canReach(vector<int>& arr, int start) {
bool res = false;
int n = arr.size();
dfs(arr, start, 0, n, res);
return res;
}
};

 

举报

相关推荐

0 条评论