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. - 1 step + 1 step + 1 step
- 1 step + 2 steps
- 2 steps + 1 step
- 感觉這道题好像已经最过好几次了,总体思想就是可能的走法为走 (n-1)+1 个阶梯或者 (n-2)+2 个阶梯,即有 f(n-1)+f(n-2) 种走法。
解法一——递归
public int climbStairs(int n) {
if(n<=2)
return n;
return climbStairs(n-1)+climbStairs(n-2);
}
Runtime: 6050 ms, faster than 6.82% of Java online submissions for Climbing Stairs.
Memory Usage: 36.4 MB, less than 22.81% of Java online submissions for Climbing Stairs.
解法二——非递归
public int climbStairs1(int n){
if(n<=2)
return n;
int step1=1;
int step2=2;
for(int i=3;i<=n;i++)
{
int sum=step1+step2;
step1=step2;
step2=sum;
}
return step2;
}
Runtime: 2 ms, faster than 93.86% of Java online submissions for Climbing Stairs.
Memory Usage: 36.5 MB, less than 7.34% of Java online submissions for Climbing Stairs.