题目
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.
思考
可以先将步数少的情况列出来,寻找规律。
n = 1
所有可能:1
一共1种
n = 2
所有可能:1, 1 / 2
一共2种
n = 3
所有可能:1, 2 / 1, 1, 1 / 2, 1
一共3种
n = 4
所有可能:1, 1, 1, 1 / 2, 1, 1 / 1, 2, 1 / 1, 1, 2 / 2, 2
一共5种
n = 5
所有可能:1, 1, 1, 1, 1 / 2, 1, 1, 1 / 1, 2, 1, 1 / 1, 1, 2, 1 / 1, 1, 1, 2 / 1, 2, 2 / 2, 1, 2 / 2, 2, 1
一共8种
……
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … |
---|---|---|---|---|---|---|---|---|
y | 1 | 2 | 3 | 5 | 8 | 13 | 21 | … |
由上面表格看出,y(n) = y(n-2) + y(n-1), n >= 3
我的答案
c++
class Solution {
public:
int climbStairs(int n) {
if (n == 0 || n == 1 || n == 2 || n == 3) {
return n;
}
int a = 2, b = 3, result = 0;
for (int i = 4; i <= n; i++) {
result = a + b;
a = b;
b = result;
}
return result;
}
};