⼀、杨辉三⾓介绍
杨辉三⾓形,⼜称帕斯卡三⾓形、贾宪三⾓形、海亚姆三⾓形、巴斯卡三⾓形,是⼆项式系数的⼀种写法,形似三⾓形,在中国⾸现于南宋杨辉的《详解九章算法》得名,书中杨辉说明是引⾃贾宪的《释锁算书》,故⼜名贾宪三⾓形。在那之前,还有更早发现这个三⾓的波斯数学家和天⽂学家,但相关的内容没有以图⽂保存下来,所以中国的数学家对此研究有很⼤贡献。 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*/
8private static int binomialCoefficient(int n, int k) {
9int res = 1;
10if (k > n - k) {
11 k = n - k;道生液
冯代存
激光标记
12 }
13for (int i = 0; i < k; i++) {
腐蚀监测14 res *= (n - i);
15 res /= (i + 1);
16 }
17return res;
fifox18 }
打印杨辉三⾓的函数:
1/**
2 * 打印杨辉三⾓
3 *
4 * @param n
5*/
6private static void printPascal(int n) {
7for (int line = 0; line < n; line++) {
8for (int i = 0; i <= line; i++) {
9 System.out.print(binomialCoefficient(line, i) + " ");
10 }
11 System.out.println();
12 }
永磁发电机
13 }
算法的时间复杂度⼤致为 O(N3),这⾥ N 为所打印杨辉三⾓的⾏数。