这一道题关键是推导出来最佳子机构,可以这样理解:
因为每一次只能迈出一步或者两步
那么我们设f(n)
为n阶楼梯的走法,那么这个f(n)可以分为两部分,一部分是第一步迈出的是一节,另一部分是第一步迈出的是两节
,那么就会得出公式
f(n) = f(n-1) + f(n-2)
然后f(1) = 1;f(2) =2 ;
即可得到结果,用递归或者其他什么方法,随便你,下面是我的代码:
class Solution {
public:
int climbStairs(int n) {
if (n <= 1) return 1;
if (n == 2) return 2;
int oneStep = 1;
int twoStep = 2;
int result = 0;
for (int i = 3; i <= n; i++)
{
result = oneStep + twoStep;
oneStep = twoStep;
twoStep = result;
}
return result;
}
};