1. 题目
地址:传送门
2. 原本我的理解
每一格都要跳,只要判断当前跳的距离是不是在,上次跳的距离K的加一和减一区间里面就可以了
[0,1,3,5,6,8,12,17]
public static boolean canCross(int[] stones) {
if(stones.length<=2){
return false ;
}
int len = stones[1] - stones[0];
int max = len + 1;
int min = len - 1;
if (len <= 1) {
min = len;
}
for (int i = 2; i < stones.length; i++) {
len=stones[i]-stones[i-1];
if (len <= 1) {
min = len;
}
if ( len>=min && len<=max) {
} else {
return false;
}
max = len + 1;
min = len - 1;
}
return true;
}
所以写下来上面的代码,但是经过力扣验证时错误的,才发现题目时可以隔着跳,不一定要把所有的格子都跳完
感觉就变成了一个由递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法。
我们直接来动态规划求解吧!