Question: 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?
递归求解。
f(1) = 1;
f(2) = 2;
f(n) = f(n-1) + f(n-2);
即为斐波那契数列,可转化为迭代。
class Solution {
public:
int climbStairs(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int i = 1;
int j = 2;
if (n == 1) return i;
else if (n == 2) return j;
int i1 = 0;
int j1 = 0;
int k;
for (k = 3; k <= n; k += 2)
{
i1 = i + j;
j1 = j + i1;
i = i1;
j = j1;
}
if (k == n + 1)
return j;
else
return i;
}
};