思路:dfs方法,从开始节点开始进行深度优先遍历,利用一个数组vis[]记录该位置是否被访问过,如果遍历到一个已经访问的位置,返回false 如果遍历到某位置的值为0,返回true
code:
class Solution {
public boolean ans=false;
public boolean vis[];
public boolean canReach(int[] arr, int start) {
vis=new boolean[arr.length];
dfs(arr,start);
return ans;
}
public void dfs(int arr[],int start){
if(vis[start]==true){//已经访问过
return;
}
vis[start]=true;
if(arr[start]==0){
ans=true;
return;
}
if(0<=start+arr[start]&&start+arr[start]<arr.length)
dfs(arr,start+arr[start]);
if(0<=start-arr[start]&&start-arr[start]<arr.length)
dfs(arr,start-arr[start]);
}
}