403. 青蛙过河(动态规划)
该题采用动态规划,动态规划最重要的是dp方程,看看如何拆解
设有动态规划数组dp[i][k],i为当前所在的石子编号,k为上一次跳跃的距离,由上述理论可知当有n个石子时,如果dp[n-1][k]为true则返回true
确定了大方向,由小见大,对于第 i 个石子,我们首先枚举所有的 j(即上一次所在的石子编号),那么「上一次跳跃距离」k 即为 stones[i] - stones[j],如果在第 j个石子上,青蛙的「上一次跳跃距离」可以为k-1,k,k+1三者之一,那么我们此时的方案即为合法方案,因此我们只需要检查dp[j][k-1],dp[j][k],dp[j][k+1]这三者当中有一个为真即可,即dp[i][k] = dp[j][k - 1] || dp[j][k] || dp[j][k + 1];