70. Climbing Stairs

来源:互联网 发布:网络空间安全研究生 编辑:程序博客网 时间:2024/05/03 04:23

题意: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?

Note: Given n will be a positive integer.

思路:这题其实用排列组合的方法也可以解,但这提的本质其实就是菲波那切数列,r[i+2]其实是由r[i+1]和r[i]分别走一步和两部构成的,所以r[i+2] = r[i+1]+r[i],这样的话解法就很多了。

C++:这是我最开始的解法,但是时间超了。。。:

class Solution {public:    void recur(int cur, int n, int &result){        if (cur > n)            return;        else if (cur == n){            result += 1;            return;        }        else{            recur(cur + 1, n, result);            recur(cur + 2, n, result);        }    }    int climbStairs(int n) {        int result = 0;        recur(0, n, result);        return result;    }};

Python:当然,可以不用设置数组,直接用常数空间求解:

def climbStairs(self, n):    a = b = 1    for _ in range(n):        a, b = b, a + b    return a
0 0
原创粉丝点击