假设你正在爬楼梯,须要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不一样的方法爬到楼顶部?算法
样例code
好比n=3,1+1+1=1+2=2+1=3,共有3中不一样的方法递归
返回 3it
class Solution {
public:
/**
* @param n: An integer
* @return: An integer
*/
int climbStairs(int n) {
// write your code here
long int Ways_Num[100];
Ways_Num[0] = 1;
Ways_Num[1] = 1;
for (int i = 2; i < 100; i++)
Ways_Num[i] = Ways_Num[i - 1] + Ways_Num[i - 2];
return Ways_Num[n];
}
};io
要想爬到第n阶楼梯,有两种方法,一是从第n-1阶爬一步,另外一种是从第n-2阶爬两步,所以问题为NUM[n]=NUM[n-1]+NUM[n-2],便可获得全部的结果,但递归算法会重复屡次计算某一阶的方法,所以当楼梯数过大时,计算会很是耗费时间。class
例如:当楼梯数为6时,屡次重复计算5,4,3,2阶的方法数,因此递归并非一个好方法。 cli