Leetcode Algorithm 070. Climbing Stairs
Climbing Stairs
有一条n级的楼梯,每次只能走一级或两级,求总共有多少级走法
解题思路
用f[i]
表示走到第i
级的时候的走法,那么我们只可能从第i-1
级走一步或者从i-2
级走两步到达第i
级,故有一条状态转移方程式:
f[i] = f[i-1] + f[i-2]
。
边界情况有:f[0] = 0; f[1] = 1; f[2] = 2;
可以发现这条状态转移方程类似斐波那契数列,可以用递归法或者迭代法来求解。下面给出迭代法的解法。
代码
#include<iostream>
using namespace std;
class Solution {
public:
int climbStairs(int n) {
int f1 = 1;
int f2 = 2;
if (n == 0)
return 0;
else if (n == 1)
return f1;
else if (n == 2)
return f2;
else {
int fn;
while (n > 2) {
fn = f1 + f2;
f1 = f2;
f2 = fn;
n--;
}
return fn;
}
}
};
测试样例
int main() {
Solution s;
cout << s.climbStairs(3) << endl;
cout << s.climbStairs(44) << endl;
return 0;
}
输出
3
1134903170