問題描述 :
這裡有乙個非負整數陣列 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
示例 2:
輸入:arr = [4,2,3,0,3,1,2], start = 0
輸出:true
解釋:到達值為 0 的下標 3 有以下可能方案:
下標 0 -> 下標 4 -> 下標 1 -> 下標 3
示例 3:
輸入:arr = [3,0,2,1,2], start = 2
輸出:false
解釋:無法到達值為 0 的下標 1 處。
輸入說明 :
首先輸入陣列arr的長度n,
然後輸入n個整數,以空格分隔。
最後輸入整數start。
1 <= n <= 5 * 10^4
0 <= arr[i] < n
0 <= start < n
輸出說明 :
輸出true或false
輸入範例 :
74 2 3 0 3 1 2
5輸出範例 :
true
#include
#include
using
namespace std;
bool
dfs(vector<
int>
&arr,
int start)
int step=arr[start]
; arr[start]=-
1;return step==0||
dfs(arr,start-step)
||dfs
(arr,start+step);}
bool
canreach
(vector<
int>
&arr,
int start)
intmain()
int start;
cin>>start;
bool res=
canreach
(arr,start)
; cout<<
(res?
"true"
:"false");
return0;
}
1306 跳躍遊戲 III
這裡有乙個非負整數陣列 arr,你最開始位於該陣列的起始下標 start 處。當你位於下標 i 處時,你可以跳到 i arr i 或者 i arr i 請你判斷自己是否能夠跳到對應元素值為 0 的 任意 下標處。注意,不管是什麼情況下,你都無法跳到陣列之外。示例 1 輸入 arr 4,2,3,0,3...
1306 跳躍遊戲 III
這裡有乙個非負整數陣列arr,你最開始位於該陣列的起始下標start處。當你位於下標i處時,你可以跳到i arr i 或者i arr i 請你判斷自己是否能夠跳到對應元素值為 0 的任意下標處。注意,不管是什麼情況下,你都無法跳到陣列之外。示例 1 輸入 arr 4,2,3,0,3,1,2 star...
Leetcode 1306 跳躍遊戲III
這裡有乙個非負整數陣列 arr,你最開始位於該陣列的起始下標 start 處。當你位於下標 i 處時,你可以跳到 i arr i 或者 i arr i 請你判斷自己是否能夠跳到對應元素值為 0 的 任意 下標處。注意,不管是什麼情況下,你都無法跳到陣列之外。示例 1 輸入 arr 4,2,3,0,3...