题目地址:
https://leetcode.com/problems/jump-game-iii/description/
给定一个长 n n n的非负数组 A A A,再给定一个位置 x , 0 ≤ x < n x,0\le x<n x,0≤x<n,每一步可以走到 x + A [ x ] x+A[x] x+A[x]或者 x − A [ x ] x-A[x] x−A[x]。问最终是否能走到满足某个 A [ x ] = 0 A[x]=0 A[x]=0的 x x x。
可以直接DFS,DFS的时候标记一下走过的位置,以防重复访问。代码如下:
class Solution {
public:
bool canReach(vector<int>& arr, int start) {
return dfs(start, arr);
}
bool dfs(int x, vector<int>& A) {
if (!A[x]) return true;
if (A[x] == -1) return false;
int dx = A[x];
// 标记一下走过的位置
A[x] = -1;
if (x - dx >= 0 && dfs(x - dx, A)) return true;
if (x + dx < A.size() && dfs(x + dx, A)) return true;
return false;
}
};
时间复杂度 O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2),空间 O ( h 1 + h 2 ) O(h_1+h_2) O(h1+h2)。