假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
https://leetcode-cn.com/problems/climbing-stairs/
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例1:
示例2:
Java解法
package sj.shimmer.algorithm.m2;
/**
* Created by SJ on 2021/3/3.
*/
class D38 {
public static void main(String[] args) {
System.out.println(climbStairs(2));
System.out.println(climbStairs(3));
System.out.println(climbStairs(5));
System.out.println(climbStairs(10));
}
public static int climbStairs(int n) {
int[] sum = new int[n+1];
for (int i = 1; i <= n; i++) {
if (i == 1) {
sum[i] = 1;
} else if (i == 2) {
sum[i] = 2;
} else {
sum[i] = sum[i-1]+sum[i-2];
}
}
return sum[n];
}
}
官方解
https://leetcode-cn.com/problems/climbing-stairs/solution/pa-lou-ti-by-leetcode-solution/
-
动态规划
- 时间复杂度:O(n)
- 空间复杂度:O(1)
矩阵快速幂、通项公式(这就是让我气愤的地方,竟然是简单题,数学知识忘光了我个菜鸡)