
解题思路:
- dp 数组的含义: 达到第 i 阶有 dp[i] 种方法。
- 递推公式: dp[i] = dp[i - 1] + dp[i - 2]。
- dp 数组初始化: dp[0] = 1,dp[1] = 2。
- 遍历顺序: 从 i = 2 开始,直到 i = n - 1。
- 打印 dp 数组
Java代码:
class Solution {
public int climbStairs(int n) {
if (n == 1) return 1;
int[] dp = new int[n];
dp[0] = 1;
dp[1] = 2;
for (int i = 2; i < n; i++)
dp[i] = dp[i - 1] + dp[i - 2];
return dp[n - 1];
}
}
复杂度分析:
- 时间复杂度: O(n)。
- 空间复杂度: O(1)。

解题思路:
- dp 数组的含义: 下标为 i,j 的位置元素的值。
- 递推公式: dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]。
- dp 数组初始化: result.add(List.of(1))。
- 遍历顺序: 从 i = 1(第二行)开始,直到 i = numRows - 1。
- 打印 dp 数组
Java代码:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
result.add(List.of(1));
for (int i = 1; i < numRows; i++) {
List<Integer> row = new ArrayList<>();
List<Integer> prevRow = result.get(i - 1);
row.add(1);
for (int j = 1; j < i; j++)
row.add(prevRow.get(j - 1) + prevRow.get(j));
row.add(1);
result.add(row);
}
return result;
}
}
复杂度分析:
- 时间复杂度: O(
n
2
n^2
n2)。
- 空间复杂度: O(
n
2
n^2
n2)。