链接:
https://leetcode.com/problems/jump-game/
大意:
给定一个数组nums,数组中的每个元素nums[i]表示在该位置i最多可向前(右)跳nums[i]个距离。求:从起点0能否最终跳到终点nums.length - 1。例子:
思路:
动态规划。
逆推动归 从终点往起点逆推
记min为可以跳到最后位置且离最后位置最远的位置
若当前位置i是可以跳到最后位置且离最后位置最远的位置min
则当i-1可以跳到i时,i-1肯定可以跳到最后,此时并更新min
否则继续往左找可以跳到最后位置且离最后位置最远的位置
代码:
class Solution {
/*
逆推动归 从终点往起点逆推
记min为可以跳到最后位置且离最后位置最远的位置
若当前位置i是可以跳到最后位置且离最后位置最远的位置min
则当i-1可以跳到i时,i-1肯定可以跳到最后,此时并更新min
否则继续往左找可以跳到最后位置且离最后位置最远的位置
*/
public boolean canJump(int[] nums) {
if (nums.length <= 1)
return true;
int min = nums.length - 1;
for (int index = nums.length - 2; index >= 0; index--) {
if (index + nums[index] >= min)
min = index;
}
return min == 0;
}
}
结果:
结论:
动态规划,理解了状态之间怎么转移,找到了递推公式就好做。