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.
Example 1:
Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
- 1 step + 1 step
- 2 steps
Example 2:
Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
3. 1 step + 1 step + 1 step
4. 1 step + 2 steps
5. 2 steps + 1 step
思路
一道感动到哭的题,第一次手撸动态规划:动态规划视频
- 有三个变量:optn_2,optn_1,optn。
- optn:代表n=k时的最优解。
- optn_1:代表n=k-1时的最优解。
- optn_2:代码n=k-2时的最优解。
- 由梯子理论不难得出:n层梯子的步数=第n-1层步数+爬一步加上n-2层步数+爬二步(因为n步子只有一和二,故只有上面两种情况)
一开始用的递归,但是时间超了,后面改用for
代码
class Solution {
public int climbStairs(int n) {
int optn_2 = 1,optn_1 = 2,optn=0;
if(n==1) return 1;
if(n==2) return 2;
for(int i=3;i<=n;i++){
optn = optn_2+optn_1;
optn_2 = optn_1;
optn_1 = optn;
}
return optn;
}
}