剑指offer之变态跳台阶

版权声明:所有的博客都是作为个人笔记的。。。。。。 https://blog.csdn.net/qq_35976351/article/details/82824480

问题描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

求解思路

该题目肯定不能用递归求解和组合路径的方式。结合前一个题目的斐波那契思想,我们需要写出递推表达式:
假设 f ( n ) f(n) 是走到第 n n 个台阶花费的步数,那么前一个台阶号总共有 n 1 n-1 中可能
(1) f ( n ) = f ( n 1 ) + f ( n 2 ) + + f ( 2 ) + f 1 f(n)=f(n-1)+f(n-2)+\cdots+f(2)+f1 \tag{1}
同样的:
(2) f ( n 1 ) = f ( n 2 ) + f ( n 3 ) + + f ( 2 ) + f 1 f(n-1)=f(n-2)+f(n-3)+\cdots+f(2)+f1 \tag{2}
( 2 ) ( 1 ) f ( n ) = 2 × f ( n 1 ) (2)-(1)\Rightarrow f(n)=2\times f(n-1)

本质上是一个动态规划!!

代码实例

class Solution {
  public:
    int jumpFloorII(int number) {
        if(number == 1) {
            return 1;
        }
        int n = 1;
        for(int i = 2; i <= number; ++i) {
            n *= 2;
        }
        return n;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/82824480
今日推荐