這里有一個非負整數數組 arr,你最開始位于該數組的起始下標 start 處。當你位于下標 i 處時,你可以跳到 i + arr[i] 或者 i - arr[i]。
請你判斷自己是否能夠跳到對應元素值為 0 的 任一 下標處。
注意,不管是什么情況下,你都無法跳到數組之外。
示例 1:
輸入:arr = [4,2,3,0,3,1,2], start = 5
輸出:true
解釋:
到達值為 0 的下標 3 有以下可能方案:
下標 5 -> 下標 4 -> 下標 1 -> 下標 3
下標 5 -> 下標 6 -> 下標 4 -> 下標 1 -> 下標 3
代碼
class Solution {public boolean canReach(int[] arr, int start) {int n=arr.length;Queue<Integer> queue=new LinkedList<>();boolean[] check=new boolean[n];//檢查是否被遍歷過了queue.add(start);check[start]=true;while (!queue.isEmpty())//bfs{int cur=queue.poll();if(arr[cur]==0) return true;//找到目標int cr=arr[cur]+cur,cl=cur-arr[cur];if(cr>=0&&cr<n&&!check[cr])//可以跳躍{queue.offer(cr);check[cr]=true;}if(cl>=0&&cl<n&&!check[cl]){queue.offer(cl);check[cl]=true;}}return false;}
}