打印出杨辉三角形(要求打印出 10 行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...杨辉三角形(又称帕斯卡三角形)是一个经典的数学结构,具有以下性质:
每行首尾元素均为 1
中间每个元素等于其左上方和正上方两个元素之和
第 行(从第 0 行开始计数)对应二项式 的展开系数
第 行第 列的值为组合数:
利用滚动数组思想,从右往左更新,可将空间复杂度从 降至:
public class YangHuiOptimized {
public static void main(String[] args) {
int n = 10;
int[] row = new int[n];
row[0] = 1;
for (int i = 0; i < n; i++) {
// 从右往左更新,避免覆盖未使用的旧值
for (int j = i; j >= 1; j--) {
row[j] = row[j] + row[j - 1];
}
// 打印当前行
for (int j = 0; j <= i; j++) {
System.out.printf("%4d", row[j]);
}
System.out.println();
}
}
}历史:虽然以中国南宋数学家杨辉(1238–1298)命名,但此三角形最早由北宋贾宪(约 11 世纪)提出,故也称“贾宪三角”。在西方称为帕斯卡三角形(Blaise Pascal, 1653 年系统研究)。
应用:
快速计算组合数
二项式展开系数
概率分布(如二项分布)
分形几何(如谢尔宾斯基三角形)
杨辉三角是连接代数、组合与几何的优美桥梁,也是编程入门必练的经典问题。