杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。
-
每个数等于它上方两数之和。
-
每行数字左右对称,由1开始逐渐变大。
-
第n行的数字有n项。
-
前n行共[(1+n)n]/2 个数。
-
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
-
第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
-
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
-
杨辉三角在编程实现中较为容易。最常见的算法便是用上一行递推计算;也有运用和组合的对应关系而使用阶乘计算的,然而后者速度较慢且阶乘容易溢出
public static void main(String[] args) {
//System.out.println(getRow(0));
System.out.println(generate(34));
}
public static List<Integer> getRow(int rowIndex) {
int number = 1;
List<Integer> list = new ArrayList<>();
list.add(1);
for (int i = 0; i < rowIndex; i++) {
long temp = (long) number * (rowIndex - i) / (i + 1);
number = Math.toIntExact(temp);
list.add(number);
}
return list;
}
public static List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
list.add(getRow(i));
}
return list;
}