跳跃游戏
题目描述:
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。提示:1 <= nums.length <= 3 * 10^40 <= nums[i] <= 10^5
class Solution {
public boolean canJump(int[] nums) {
// 初始化
int len = nums.length;
boolean[] jump = new boolean[len];
jump[0] = true;
// 动态规划过程
for(int i = 1 ; i<len ; i++){
boolean temp = false;
for(int j = 1 ; j <= i ; j++){ // 遍历所有可能跳跃到下标i位置的可能
if(nums[i-j] >= j && jump[i-j]){ // 前面的都能跳跃到这里
temp = true;
break;
}
}
jump[i] = temp;
}
return jump[len - 1];
}
}
这里运用了动态规划,定义jump存储数组为是否能够跳跃到当前下标的位置。
其转移公式为:
jump[i] = {jump[i-1] || jump[i-2] || ...|| jump[i-j] || ... || jump[0]} (只有当nums[i-j]>=j && jump[i-j]时,jump[i] == true)
详细请看代码,读者有疑问欢迎留言。