题目:
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例:
比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法
返回 3
思路:
因为一次只能爬一步或者两步。所以第n步有两种方法:第一种是从n-1步的地方爬到顶部;另一种是从n-2步的地方直接爬到顶部。a[i]表示到达第i步有多少种不同的方法,a[i] = a[i-1]+a[i-2]。本题类似于斐波那契数列(递归的方法,但是太耗时间)。
参考答案:
class Solution {
public:
/**
* @param n: An integer
* @return: An integer
*/
int climbStairs(int n) {
// write your code here
/*迭代的方法当n=44时,代码执行的次数太多
if(n == 1)
return 1;
if(n == 2)
return 2;
else
return climbStairs(n-1)+climbStairs(n-2);
*/
//典型的空间换时间
int a[n+1];
a[0] = 0;
a[1] = 1;
a[2] = 2;
for(int i=3; i<=n; i++)
{
a[i] = a[i-1] + a[i-2];
}
return a[n];
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。