给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true
;
A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false
。
输入格式
第一行输入一个正整数 n(1≤n≤500),接下来的一行 n 个整数,输入数组 Ai。
输出格式
如果能跳到最后一个下标,输出true
,否则输出false
。
样例输入
5 2 0 2 0 1
样例输出
true
这道题目需要用到递归和贪心算法的思想,每次从当前数组的位置往后跳跃的时候,取最大能够跳的位置,然后每次以同样的方法跳跃,这是一个递归的过程,当跳出了数组的长度时,此时递归结束,返回true,否则,以最大跳跃递减进行跳跃,当所有可能的跳跃都执行结束,还没有到达数组的最后一个位置,那么返回false。注意这里有一个需要注意的地方,如果递归最底层的函数没有达到数组最后一个位置,那么当前位置的最大跳跃长度应置为-1,这样会提高很多的性能。如果没有加上这个语句,会使程序超时。