杨辉三角

GitHub跳转原题关系图返回列表

边界恒为 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()

复杂度

  • 时间复杂度:O(n2)O(n^2)
  • 空间复杂度:O(n2)O(n^2),存储结果。

总结

杨辉三角是二维递推的基础:每行依赖上一行,边界初始化为 1,内部由相邻两个值相加。