使用二维数组打印一个 10 行杨辉三角 <<九章算法>> <<杨辉算法>>
介绍
- 每个数等于它上方两数之和。
- 每行数字左右对称,由1开始逐渐变大。
- 第n行的数字有n项。
- 前n行共[(1+n)n]/2 个数。
- 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
- 第n行的第m个数和第n-m+1个数相等
,为组合数性质之一。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1*/
public static void main(String[] args)
{
/*【面试】 使用二维数组打印一个 10 行杨辉三角 <<九章算法>> <<杨辉算法>>
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
思路分析
1. 一共有 5 行
2. 每行有 个数,和行数相等 , 比如 1行 = 1数 2 行 = 2 数 3 行 = 3数
3. 从第三行开始,对于 非第一个元素和最后一个元素,她的值 arr[i][j]
arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //分析*/
//定义二维数组,该二维数组的行可以确定,列是变化的,需要动态的赋值
int yangHui[][] = new int[6][];
for( int i = 0; i < yangHui.length; i++) {//i表行
//每一行,动态分配
yangHui[i] = new int[i+1];
//遍历 yangHui[i] 分配值
//规律我做了分析
for( int j = 0; j < yangHui[i].length; j++) {
//对于每行的第一个元素和最后一个元素,1
if( j == 0 || j == yangHui[i].length - 1) {
yangHui[i][j] = 1;
} else {
yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1];
}
}
}
//看看效果
for( int i = 0; i < yangHui.length; i++) {//i表行
for( int j = 0; j < yangHui[i].length; j++) {
System.out.print( yangHui[i][j] + "\t");
}
System.out.println();
}
}