一、楊輝三角介紹
楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形、巴斯卡三角形,是二項式系數的一種寫法,形似三角形,在中國首現於南宋楊輝的《詳解九章算法》得名,書中楊輝說明是引自賈憲的《釋鎖算書》,故又名賈憲三角形。在那之前,還有更早發現這個三角的波斯數學家和天文學家,但相關的內容沒有以圖文保存下來,所以中國的數學家對此研究有很大貢獻。
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
以上是楊輝三角的前 9 行,可以看出來每一行的所有數字對應着二項式 (A+B)n 的展開式系數,這里 n 從第 0 行開始。
二、楊輝三角的一些性質與實現
此三角形的性質有(注:最頂的 1 處於第 0 行):
-
由正整數構成,每一行的數字左右對稱;
-
第(2的冪)行都是奇數;
-
每一行數字之和都是2的冪;
-
第N行數字個數都是N;
-
第N行的第K個數字為組合數
;
-
除每行最左側與最右側的數字以外,每個數字等於它的左上方與右上方兩個數字之和(也就是說,第 N 行第 K 個數字等於第 N-1 行的第 K-1 個數字與第 K 個數字的和)。
因而固有恆等式:
可用此性質寫出整個楊輝三角形。
1 /** 2 * 楊輝三角與 (a+b)^n 二項式系數的展開 3 * 4 * @param n 5 * @param k 6 * @return 7 */ 8 private static int binomialCoefficient(int n, int k) { 9 int res = 1; 10 if (k > n - k) { 11 k = n - k; 12 } 13 for (int i = 0; i < k; i++) { 14 res *= (n - i); 15 res /= (i + 1); 16 } 17 return res; 18 }
打印楊輝三角的函數:
1 /** 2 * 打印楊輝三角 3 * 4 * @param n 5 */ 6 private static void printPascal(int n) { 7 for (int line = 0; line < n; line++) { 8 for (int i = 0; i <= line; i++) { 9 System.out.print(binomialCoefficient(line, i) + " "); 10 } 11 System.out.println(); 12 } 13 }
算法的時間復雜度大致為 O(N3),這里 N 為所打印楊輝三角的行數。