本题的意思是有一个n阶的梯子,每次只能爬1阶或2阶,求爬到梯子顶端总共可能的情况有多少。
我采用动态规划的算法解决此题。假设爬到一个阶为n的梯子的顶端总共可能的情况是f(n)。那么,按照爬到梯子顶端最后一步可能是1阶或2阶的想法,可以分成两种情况,不难想到:f(n) = f(n - 1) + f(n - 2),f(n - 1) = f(n - 2) + f(n - 3),…,f(3) = f(2) + f(1);而f(1) = 1,f(2) = 2。这样递推下去,最后求出f(n),就是此题的解。
class Solution {
public:
int climbStairs(int n) {
if (n == 1) {
return 1;
} else {
int *fn = new int[n];
fn[0] = 1;
fn[1] = 2;
for (int i = 2; i < n; ++i) {
fn[i] = fn[i - 1] + fn[i - 2];
}
return fn[n - 1];
}
}
};