Leetcode OJ 70. Climbing Stairs
题目描述:
You are climbing astair case. It takes n steps to reach to the top.
Each time you caneither 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阶或2阶,求有多少种不同的方式爬到顶端
测试用例:
功能测试:奇数、偶数、边界1
分析:
1. 爬1阶有1种方式
2. 爬2阶有2种方式
3. 爬3阶= 爬1阶的方式+爬2阶的方式,即爬3阶相当于从1阶爬上来或从2阶爬上来
4. 爬n阶= 爬n-2阶的方式+爬n-1阶的方式
解答:
public static int climbStairs(int n){
int stepprepre= 1;
int steppre= 2;
int ans = 0;
if(n == 1)return 1;
if(n == 2)return 2;
for(int i = 3; i <= n; i++){
ans = stepprepre + steppre;
stepprepre = steppre;
steppre = ans;
}
return ans;
}
简洁的解答:
public int climbStairs(int n) { int a = 1, b = 1; while (n-- > 0) a = (b += a) - a; return a; }