计蒜客-题库-爬楼梯

题目

假设你现在正在爬楼梯,楼梯有 n级。每次你只能爬 1级或者 2级,那么你有多少种方法爬到楼梯的顶部?

输入格式

第一行输入一个整数 n(1≤n≤50),代表楼梯的级数。

输出格式

输出爬到楼梯顶部的方法总数。

样例输入

5

样例输出

8

思路

每次只能爬1或者2级,也就是说可以从前n-1、n-2两级任意一级到达n级,那么到达第n级的总数就是前两级的和,有点斐波拉契的意思

代码

#include<iostream>
using namespace std;
long long  num[51];
long long solve(int n){
    if (n == 1){
        return 1;
    }
    if (n == 2){
        return 2;
    }
    if (num[n] != 0){
        return num[n];
    }
    return num[n]=solve(n - 1) + solve(n - 2);
}
int main(){
    int n;
    cin >> n;
    cout << solve(n) << endl;
    return 0;
}

使用数组num存储每一级的总数,避免重复计算导致的超时

 

posted @ 2017-04-27 19:43  喝醉的香锅锅  阅读(153)  评论(0编辑  收藏  举报