边界恒为 1,内部由上一行相邻两数相加,逐行递推生成。
OJ: leetcodecn
题目 ID: pascals-triangle
难度:入门
标签:动态规划递推
日期: 2026-07-29 12:35
题意
生成杨辉三角的前 n 行。
思路
每行边界为 1,内部 ans[i][j] = ans[i-1][j-1] + ans[i-1][j]。逐行从上到下填充。
代码
cpp
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector<vector<int>> generate(int n) {
vector<vector<int>> ans(n);
for (int i = 0; i < n; i++) {
ans[i].resize(i + 1, 1);
for (int j = 1; j < i; j++)
ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j];
}
return ans;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (auto &v : Solution().generate(n)) {
for (int x : v)
cout << x << ' ';
cout << '\n';
}
return 0;
}python
#!/usr/bin/env python3
from typing import List
class Solution:
def generate(self, n: int) -> List[List[int]]:
ans = []
for i in range(n):
row = [1] * (i + 1)
for j in range(1, i):
row[j] = ans[-1][j - 1] + ans[-1][j]
ans.append(row)
return ans
def main():
n = int(input())
for v in Solution().generate(n):
print(*v)
if __name__ == "__main__":
main()复杂度
- 时间复杂度:
。 - 空间复杂度:
,存储结果。
总结
杨辉三角是二维递推的基础:每行依赖上一行,边界初始化为 1,内部由相邻两个值相加。