力扣刷题笔记——第403题. 青蛙过河

BlueStragglers 分享技术成长的快乐

参考题解:官方题解

问题:

力扣刷题笔记——第403题. 青蛙过河_第1张图片

标签:

  • 动态规划。

思路:

  • 这是一道典型的动态规划题。
  • 用二维布尔数组存储状态。DP[0][0] 为初始状态为 true。
  • 状态转移 DP[I][K] = DP[J][K - 1] || DP[J][K] || DP[J][K + 1]
  • 当两个石头间距大于 i 时没有答案。

题解:

class Solution {
    public boolean canCross(int[] stones) {
        int n = stones.length;
        boolean[][] dp = new boolean[n][n];
        dp[0][0] = true;
        for (int i = 1; i < n; ++i) {
            if (stones[i] - stones[i - 1] > i) {
                return false;
            }
        }
        for (int i = 1; i < n; ++i) {
            for (int j = i - 1; j >= 0; --j) {
                int k = stones[i] - stones[j];
                if (k > j + 1) {
                    break;
                }
                dp[i][k] = dp[j][k - 1] || dp[j][k] || dp[j][k + 1];
                if (i == n - 1 && dp[i][k]) {
                    return true;
                }
            }
        }
        return false;
    }
}

你可能感兴趣的:(刷题笔记,动态规划,leetcode,java)