剑指offer:跳台阶

题目

题目链接
剑指offer:跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解题思路

这题关键点在于要将问题分解:
因为青蛙每次跳1步或者2步,故跳上第n级台阶时只有两种可能,1.青蛙从n-1级台阶直接跳上来,2.青蛙从n-2级台阶直接跳上来。
这样一来就可以将能够写出状态转移式:f[n]=f[n-1]+f[n-2],对斐波那契数列熟悉的同学会发现和斐波那契数列问题的状态转移式一样,只是f[2]变成了2,因此代码也是极其相似的。

具体代码

class Solution { public:
    int jumpFloor(int number) {
        if (number < 0)
            return -1;
        if (number <= 2)
            return number;
        int sum = 2;
        int pre = 1;
        for (int i = 3; i <= number; i++) {
            sum += pre;
            pre = sum - pre;
        }
        return sum;
    }
};
posted @ 2019-03-31 17:14  Bylight  阅读(177)  评论(0编辑  收藏  举报