【JAVA算法】跳跃小游戏
具体要求:
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
图形示例:
解题思路:
- 指针i从倒数第二位往前遍历,n代表步数,初始为1
- 若nums[i]大于或等于n,说明从此位置可以跳到最后一位,并从此位置截断,此位置便为最后一位
- 若nums[i]小于n,说明从此位置不能跳到最后一位,则n++,向前遍历查看其它位置是否能跳到最后一位
- 遍历到最后一位时步数大于1,说明跳跃游戏会失败,返回false,否则返回true.
详细代码:
class Solution {
public boolean canJump(int[] nums) {
int n = 1;
//从倒数第二位开始遍历
for(int i=nums.length-2; i>=0; i--){
if(nums[i] >= n){
n=1; //从此处截断,作为新位置,重新开始
}else{
n++;
}
//异常判断,如果遍历到最后一位时,步数大于1,游戏失败
if(i==0 && n>1){
return false;
}
}
return true;
}
}
public class LeetcodeTest {
public static void main(String[] args) {
//类的调用
Solution So = new Solution();
//定义数组
int[] nums = {2,3,1,1,4};
System.out.println(So.canJump(nums));
}
}
需要掌握的知识:
- 对数组的熟练运用
- 类的调用
- for循环的运用
- 理清游戏思路,将思路转换为相应的算法去实现