Java用一维数组滚动更新动态生成帕斯卡三角,关键是从右往左计算以避免覆盖;数组长度为n,第i行有i+1个元素,初始化row[0]=1,对每行i从1到n-1,逆序更新row[j] = row[j] + row[j-1]。

Java 中用数组实现帕斯卡三角(杨辉三角)的动态生成,核心是利用一维数组滚动更新,避免二维数组的空间浪费。关键在于每行从右往左计算,防止覆盖上一行尚未使用的值。
用一维数组模拟逐行生成
不需要为每一行单独分配数组,只需一个长度为 n 的一维数组 row,每次迭代复用它。第 i 行有 i+1 个元素(从第 0 行开始),所以数组长度至少为总行数 n。
- 初始化
row[0] = 1(第 0 行) - 对第
i行(i从 1 到n-1),从右向左更新:row[j] = row[j] + row[j-1] - 每次更新前,确保
j不超过当前行索引i
代码示例(打印前 n 行)
以下是一个简洁可运行的实现:
<font size="2"><pre class="brush:php;toolbar:false;">public static void printPascalTriangle(int n) {
if (n <= 0) return;
int[] row = new int[n];
row[0] = 1;
<pre class='brush:java;toolbar:false;'>for (int i = 0; i < n; i++) {
// 先打印当前行(只打印前 i+1 个有效值)
for (int j = 0; j <= i; j++) {
System.out.print(row[j] + " ");
}
System.out.println();
// 为下一行准备:从右往左更新
for (int j = i + 1; j > 0; j--) {
row[j] = row[j] + row[j - 1];
}
}}
立即学习“Java免费学习笔记(深入)”;
为什么必须从右往左更新?
因为每个新值依赖于“左边”和“正上方”的旧值(即 row[j-1] 和 row[j])。如果从左往右更新,row[j-1] 会被提前改写,导致 row[j] 计算错误。
- 例如第 2 行 → 第 3 行:初始
row = [1,2,1,0] - 正确(右→左):
row[3]=0+row[2]=1,row[2]=row[2]+row[1]=1+2=3,row[1]=row[1]+row[0]=2+1=3→ 得[1,3,3,1] - 错误(左→右):先改
row[1],后续计算就失真
扩展:返回完整三角(二维 List)
若需保留所有行用于后续使用,可在每次打印前将当前有效部分拷贝进 List<List<Integer>>:
- 用
Arrays.copyOf(row, i+1)提取前i+1个数 - 转为
Integer包装类型列表,加入外层 list - 空间复杂度升为 O(n²),但便于随机访问某行某列


















