楊輝三角規律
- 第
i 行(從 0 起算)有 i+1 個數。
- 兩側皆為 1。
- 內部數值 = 左上 + 右上:
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]。
完整程式碼
public class YanghuiTriangle {
public static void main(String[] args) {
int rows = 10;
int[][] triangle = new int[rows][];
for (int i = 0; i < rows; i++) {
triangle[i] = new int[i + 1]; // 第 i 行長度 i+1
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
triangle[i][j] = 1; // 兩側為 1
} else {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]; // 內部計算
}
System.out.print(triangle[i][j] + "\t");
}
System.out.println(); // 換行
}
}
}
執行結果
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
進階變化
- 格式化對齊:計算最大數字寬度,使用
String.format("%" + w + "d", val) 使三角形置中。
- 記憶體優化:僅保留上一行
int[] prev,滾動更新,空間 O(n) → O(1)。
- 遞迴實作:
C(n,k) = C(n-1,k-1) + C(n-1,k),配合快取避免重複計算。
- 組合數學公式:
C(n,k) = n!/(k!(n-k)!) 直接計算任一位置,適合單點查詢。
滾動陣列優化版
public static void printPascal(int rows) {
int[] prev = new int[1];
prev[0] = 1;
for (int i = 0; i < rows; i++) {
int[] cur = new int[i + 1];
cur[0] = cur[i] = 1;
for (int j = 1; j < i; j++) cur[j] = prev[j-1] + prev[j];
for (int v : cur) System.out.print(v + "\t");
System.out.println();
prev = cur;
}
}