给出一个非负整数数组,你最初定位在数组的第一个位置。
数组中的每个元素代表你在那个位置可以跳跃的最大长度。
判断你是否能到达数组的最后一个位置。
样例
A = [2,3,1,1,4],返回 true.
A = [3,2,1,0,4],返回 false.
==============================================================
动态规划 = 分治思想 + 去除重叠计算
public boolean canJump(int[] A) {
if (A == null) {
return false;
}
int len = A.length;
boolean[] can = new boolean[len];
can[0] = true;
//判断i是否可达。
for(int i = 1 ; i < len ; i++){
can[i] = false;
//判断 j 点是否能到达 i 点,能达到则表明 i 点可达。
for(int j = i-1 ; j >= 0 ; j--){
//使用已经解决的子问题的解来解决新问题
if(can[j] && A[j] >= i-j){
can[i] = true;
break;
}
}
}
return can[len-1];
}