参考文章 点这儿查看
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以向后跳跃的最大长度。
问题一
判断你能不能到达数组的最后一个位置。
思路:从数组的第一个位置开始,往后一格一格遍历数组,当所遍历的位置还没超出可reach范围时,根据跳力更新可reach范围,可遍历的范围必须小于等于reach值。若可reach范围可覆盖数组最后一个位置,则可到达;若不可覆盖则不可到达。
class Solution1{
public boolean jumpGame(int[] num){
int N=num.length,reach=0;
for(int i=0;i<=reach;i++){
if(reach<i+num[i]) reach=i+num[i];
if(reach>=N-1) return true;
}
return false;
}
}
问题二
若可以到达数组最后一个位置,求出所用最小步数;若不可到达,返回-1。
思路:参照问题一,只不过在遍历时要更加细化一些,在遍历完x步可到的位置后,和遍历x+1步可到的位置前时,更新步数参数step为x+1。
class Solution2{
public int jumpGame(int[] num){
int N=num.length,i = 0,reach=0,step=0,nextReach=0;
if(N=1)