403. 青蛙过河
思路:
这显然是一道动态规划的题目,我们用dp[i][k] 表示能否由前面的某一个石头 j 通过跳 k 步到达当前这个石头 i ,这个 j 的范围是 [1, i - 1]。当然,这个 k 步是 i 石头 和 j 石头之间的距离。那么对于 j 石头来说,跳到 j 石头的上一个石头的步数就必须是这个 k - 1 || k || k + 1
由此可得状态转移方程:dp[i][k] = dp[j][k - 1] || dp[j][k] || dp[j][k + 1]
另外还需要初始化:dp[0][0] = true;
public boolean canCross(int[] stones) {
/*
动态规划
dp[i][k] 表示能否由前面的某一个石头 j 通过跳 k 步到达当前这个石头 i ,这个 j 的范围是 [1, i - 1]
当然,这个 k 步是 i 石头 和 j 石头之间的距离
那么对于 j 石头来说,跳到 j 石头的上一个石头的步数就必须是这个 k - 1 || k || k + 1
由此可得状态转移方程:dp[i][k] = dp[j][k - 1] || dp[j][k] || dp[j][k + 1]
*/
int len = stones.length;
if(stones[1] != 1){
return false;
}
boolean[][] dp = new boolean[len][len];
dp[0][0] = true;