跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
思路+代码+注释:
boolean isEnd=false;
int count=0;
public int jump(int[] nums) {
/*
思路:每个位置有多种跳跃选择,遍历每种选择计算每个选择可到达的最远位置,如果最远位置大于等于终点那么就是结果,如果最终位置都小于终点,那么选择离终点最近的位置继续跳
*/
if (nums.length==1)
{
return 0;
}
jump(nums,0);
return count;
}
private void jump(int[] nums,int wei)
{
if (isEnd)
{
return;
}
int tiao=nums[wei];
int maxIndex=0;
int nextWei=0;
int jia=Integer.MAX_VALUE;
for (int i = 1; i <= tiao; i++) {
if (wei+i>=nums.length-1)
{
jia=1;
}else {
int end=wei+i+nums[wei+i];
if (end>=nums.length-1)
{
if (jia>2)
{
jia=2;
}
}else {
if (maxIndex<end)
{
maxIndex=end;
nextWei=wei+i;
}
}
}
}
if (jia!=Integer.MAX_VALUE)
{
count+=jia;
isEnd=true;
return;
}else {
count++;
jump(nums,nextWei);
}
}