剑指offer4J【C2 P10】青蛙跳台阶、斐波那契数列

题目

  1. 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法
  2. 21长方形方格填充2n的方格有多少种填法

题解

此类问题都是斐波那契数列变种、应用题。通常解法比较简单,递归、循环

  • 递归:
    int[] dp;

    private int resolveDGPrivate(int n) {
        if (n == 0 || n == 1) return 1;
        if (dp[n] > 0) return dp[n];
        int n1 = resolveDGPrivate(n - 1);
        int n2 = resolveDGPrivate(n - 2);
        dp[n - 1] = n1;
        dp[n - 2] = n2;
        return n1 + n2;
    }
    public int resolveDG(int n){
        dp=new int[n+1];
        return resolveDGPrivate(n);
    }
  • 循环
   public int resolve(int n) {
        if (n == 0 || n == 1) return 1;
        int prepre = 1;
        int pre = 1;
        int sum = 0;
        for (int i = 1; i < n; i++) {
            sum = prepre + pre;
            prepre = pre;
            pre = sum;
        }
        return sum;
    }

通常来说循环更实用,递归代码更加简洁。

源码: 剑指offer4J

你可能感兴趣的:(剑指offer4J【C2 P10】青蛙跳台阶、斐波那契数列)