一.问题描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
二.示例代码
public class ClimbStairs {
public static void main(String[] args) {
int n = 42;
int result = climbStairs(n);
System.out.println(result);
int result2 = climeStairs2(n);
System.out.println(result2);
}
private static int climbStairs(int n) {
if (n == 1 || n == 2) {
return n;
}
return climbStairs(n - 1) + climbStairs(n - 2);
}
private static int climeStairs2(int n) {
int p1 = 0, p2 = 0, r = 1;
for (int i = 1; i <= n; i++) {
p2 = p1;
p1 = r;
r = p1 + p2;
}
return r;
}
}