剑指offer-变态跳台阶

题目描述 变态跳台阶

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

解题思路

简单动态规划:

  1. 当n = 1 时,只有1阶跳:dp(1) = 1;
  2. 当n = 2 时,有一阶跳和二阶跳两种方式:dp(2) = 2;
  3. 当n = 3 时,有三种跳的方式,第一次跳出一阶后,剩下的(3-1)个台阶有dp(3-1)种跳法; 第一次跳出二阶后,剩下的(3-2)个台阶有对应dp(3-2)种跳法;直接跳到第三阶。dp(3) = dp(2) + dp(1)+ 1 = 4;
  4. 可推导出当n = n时,dp(n) = dp(n-1) + dp(n-2) + ....... + dp(1) + 1;
  5. 观察到dp(n-1) = dp(n-2) + ....... + dp(1) + 1,因此可得dp(n) = 2*dp(n-1);

DP

  • DP定义:记dp[i]为青蛙跳上一个i+1级的台阶的总跳法;

  • DP初始:dp[0] = 1,dp[1] = 2;

  • DP更新:dp[i] = 2*dp[i-1] ;

代码

class Solution {
public:
    int jumpFloorII(int number) {
        vector dp(number, 0);
        dp[0]=1;
        dp[1]=2;
        for(int i=2;i

你可能感兴趣的:(剑指offer-变态跳台阶)