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 行)
以下是一个简洁可运行的实现:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
<font size="2"><pre class="brush:php;toolbar:false;">public static void printPascalTriangle(int n) {
if (n for (int i = 0; i 0; j--) {
row[j] = row[j] + row[j - 1];
}
}
}
为什么必须从右往左更新?
因为每个新值依赖于“左边”和“正上方”的旧值(即 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>></list>:
- 用
Arrays.copyOf(row, i+1)提取前i+1个数 - 转为
Integer包装类型列表,加入外层 list - 空间复杂度升为 O(n²),但便于随机访问某行某列
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










