题目:
分析:
新建一个boolean数组,把能到达的地方标为true,最后遍历一遍是否存在等于0且能到达的坐标。
代码:
class Solution {
public boolean canReach(int[] arr, int start) {
boolean[] brr=new boolean[arr.length];
Queue<Integer> q=new LinkedList();
q.offer(start);
brr[start]=true;
while(!q.isEmpty()){
int i=q.poll();
if(i+arr[i]<arr.length&&i+arr[i]>=0&&brr[i+arr[i]]==false){
brr[i+arr[i]]=true;
q.offer(i+arr[i]);
}
if(i-arr[i]<arr.length&&i-arr[i]>=0&&brr[i-arr[i]]==false){
brr[i-arr[i]]=true;
q.offer(i-arr[i]);
}
}
for(int j=0;j<arr.length;j++){
if(arr[j]==0&&brr[j]==true){
return true;
}
}
return false;
}
}