帕斯卡三角形可用一维数组滚动更新(倒序计算节省空间)或二维数组直观建模(便于查表),本质是递推C(n,k)=C(n−1,k−1)+C(n−1,k),需注意边界、溢出及k越界返回0。

用数组生成帕斯卡三角形,本质是利用一维或二维数组模拟其逐行递推关系:每行首尾为1,中间元素等于上一行相邻两数之和。关键在于空间复用与边界处理,避免重复计算,同时自然承载二项式系数(即 C(n,k))。
一维数组滚动更新——节省空间的核心技巧
帕斯卡三角第 n 行仅依赖第 n−1 行,因此无需存储全部历史数据。用单个一维数组 dp 滚动更新即可:
- 初始化 dp[0] = 1,长度设为所需最大行数(如 n+1)
- 从第 2 行开始(i 从 1 到 n),**倒序**更新索引 j 从 i 到 1:
dp[j] = dp[j] + dp[j−1] - 倒序确保使用的是上一行旧值,避免覆盖干扰
例如生成第 4 行(n=3,索引 0~3)过程:
初始 dp = [1,0,0,0] → 第1行
i=1: dp[1] += dp[0] → [1,1,0,0]
i=2: dp[2] += dp[1], dp[1] += dp[0] → [1,2,1,0]
i=3: dp[3] += dp[2], dp[2] += dp[1], dp[1] += dp[0] → [1,3,3,1]
二维数组直观建模——便于查表与调试
若需频繁访问任意 C(n,k),或需完整展示三角结构,二维数组更直接:
- 声明 triangle[n+1][n+1],行索引 i 表示阶数(0 ≤ i ≤ n)
- 每行 i 设置 triangle[i][0] = triangle[i][i] = 1
- 对 k ∈ [1, i−1],执行:
triangle[i][k] = triangle[i−1][k−1] + triangle[i−1][k] - 该结构天然对应组合数定义:C(i,k) = C(i−1,k−1) + C(i−1,k)
二项式系数变量的实战存储策略
实际应用中(如多项式展开、概率计算),常需按需获取 C(n,k),而非整张表。推荐两种轻量方式:
- 动态单行缓存:调用时生成第 n 行一维数组,返回 dp[k],时间 O(n),空间 O(n)
- 公式+预乘逆元(大数场景):用 C(n,k) = n! / (k! (n−k)!),配合阶乘数组 + 模逆元(如需取模),适合 n ≤ 1e6 且多次查询
- 避免递归实现 C(n,k),易栈溢出且重复计算严重
边界与健壮性注意点
实际编码中容易忽略的细节:
- k 超出 [0,n] 范围时,统一返回 0(数学上 C(n,k)=0 当 kn)
- 数组索引从 0 开始,第 i 行含 i+1 个元素,别混淆“第 n 行”和“下标 n”
- 整数溢出:C(34,17) 已超 2³¹,建议用 long 或根据需求加模运算(如 10⁹+7)
- 生成前 n+1 行时,循环上限设为 n(含第 0 行),共 n+1 行

















