一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。

当前位置在第n阶台阶,那么当前位置的上一个位置可能在n-1,n-2, n-3,.....,0

所以,可以写出转移方程:

F[n]=F[n-1]+F[n-2]+F[n-3]+..+F[0]

F[0]=F[1]=1

代码:

class Solution {
public:
    int dp[21];
    int jumpFloorII(int number) {
        dp[0]=1;
          dp[1]=1;
          for(int i=2;i<=number;i++){
              for(int j=0;j<=i-1;j++)
                  dp[i]+=dp[j];
          }
        return dp[number];
          
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

化简:

F[n-1]=F[n-2]+F[n-3]+...F[0]

所以,F[n]=2*F[n-1]

代码:

class Solution {
public:
    int dp[21];
    int jumpFloorII(int number) {
        dp[0]=1;
          dp[1]=1;
          for(int i=2;i<=number;i++){
                  dp[i]=2*dp[i-1];
          }
        return dp[number];
          
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.