剑指 Offer 10- II. 青蛙跳台阶问题


剑指 Offer 10- II. 青蛙跳台阶问题

记忆化递归

class Solution {
    private int[] memo;
    public int numWays(int n) {
        // f0=1;//0
        // f1=1;
        // f2=f1+f0;//1
        // f3=f2+f1;
        // f4=f2+f3;
        memo = new int[n + 1];
        Arrays.fill(memo, -1);
        return jump(n);
    }
    private int jump(int n) {
        if (memo[n] != -1) {
            return memo[n];
        }//用到缓存
        if (n == 1 || n == 0) {
            return 1;
        }
        memo[n] = (jump(n - 1) + jump(n - 2)) % 1000_000_007;
        return memo[n];
    }
}

时间复杂度 O(n),空间复杂度 O(n)。

动态规划 1 

      //动态规划
     public int numWays(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) &#123;
            dp[i] = (dp[i - 2] + dp[i - 1]) % 1000_000_007;
        &#125;
        return dp[n];
    &#125;

时间复杂度 O(n),空间复杂度 O(n)。
https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/solution/mian-shi-ti-10-ii-qing-wa-tiao-tai-jie-wen-ti-dong/

动态规划 2

    public int numWays(int n) &#123;
        if (n == 0 || n == 1) &#123;
            return 1;
        &#125;
        int pre = 1, cur = 2;
        for (int i = 3; i <= n; i++) &#123;
            int tmp = (pre + cur) % 1000_000_007;
            pre = cur;
            cur = tmp;
        &#125;
        return cur;
    &#125;

O(1)空间复杂度的动态规划。


文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
242. 有效的字母异位词 242. 有效的字母异位词
242. 有效的字母异位词难度简单 347给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例  1:输入: s = “anagram”, t = “nagaram”输出: true 示例 2:输入: s =
2021-02-27 future
下一篇 
559. N 叉树的最大深度 559. N 叉树的最大深度
559. N 叉树的最大深度 public int maxDepth(Node root) &#123; if (root == null) &#123; return 0; &a
2021-02-27 future
  目录