关闭

LeetCode 刷题: Climbing Stairs --- 类似于Fibonacci 数列

173人阅读 评论(0) 收藏 举报
分类:

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

这道题目类似于Fibonacci 数列。

解法有两种,一种是递归,一种是非递归:

非递归:

class Solution {
public:
    int climbStairs(int n) {
        if(n<=2)
            return n;
        
        int n1 = 1;
        int n2 = 2;
        int temp =3;
        int t;
        while(temp<=n)
        {
            t = n1 + n2;
            n1 = n2;
            n2 = t;
            temp++;
        }
        return n2;
    }
};

递归:

递归效率较低,我的一个递归算法没有被LeetCode 系统接受,理由是当n很大的时候,递归太多。

改进的方法是: 将每一个运算的结果记录下来,这样下一次计算的时候,如果已经算出值的,就不用再算一遍了

改进算法:

class Solution {
    unordered_map<int, int> res = {{1,1},{2,2},{3,3}};    //必须放在climbStairs 外面,全局变量
public:
    int climbStairs(int n) {
        if(res.find(n) == res.end())
        {
            res[n] = climbStairs(n-1) + climbStairs(n-2);
        }
        return res[n];
    }
};







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27349次
    • 积分:1291
    • 等级:
    • 排名:千里之外
    • 原创:101篇
    • 转载:25篇
    • 译文:0篇
    • 评论:0条