存在型动态规划
我们需要注意dp条件 遍历时该石头前第j个石头可以到达 并且第j个石头可以跳到第i个
public boolean canJump(int[] nums) {
int n = nums.length;
boolean f[] = new boolean[n];
f[0]=true;
for (int i = 1; i < n; i++) {
f[i]=false;
for (int j = 0; j < i; j++) {
if (f[j]&&nums[j]>=i-j){//该石头前第j个石头可以到达 并且第j个石头可以跳到第i个
f[i]=true;
break;
}
}
}
return f[n-1];
}
贪心
如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
如果可以一直跳到最后,就成功了。
public boolean canJump(int[] nums) {
int k = 0;
for (int i = 0; i < nums.lenth; i++)
{
if (i > k) return false;
k = max(k, i + nums[i]);
}
return true;
}