编写程序,从键盘输入正整数n(n 不大于20 ),打印一个n层的杨辉三角型。例如从从键盘输入4,输出如下图形。

​ 1 11 121 1331 ​

解决杨辉三角的思路

观察打印的矩阵格式:第2行开始,值 = 同列的上一行的值+上一行的后一列的值。

Java实现

生成杨辉三角矩阵

public static int[][] yang(int n) {
if (n > 20 || n < 1) {
return null;
}
int[][] a = new int[n][n]; //矩阵
a[0][0] = 1; //杨辉三角的第一行
for (int i = 1; i < n ; i++) {
for (int j = 0; j < n; j++) {
if (j == 0|| j == n) a[i][j] = 1;
else a[i][j] = a[i-1][j]+a[i-1][j-1];
}
}
return a;
}
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n^2)

打印杨辉三角

public static void yang() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n > 20 || n < 1) {
return ;
}
int[][] a = new int[n][n]; //矩阵
a[0][0] = 1; //杨辉三角的第一行
for (int i = 1; i < n ; i++) {
for (int j = 0; j < n; j++) {
if (j == 0|| j == n) a[i][j] = 1;
else a[i][j] = a[i-1][j]+a[i-1][j-1];
}
}
for (int i = 0; i < a.length; i++) {
for (int j = a.length-1; j >= 0 ; j--) {
if (a[i][j] == 0) System.out.print(" ");
else System.out.print(a[i][j]);
}
System.out.print("\n");
}
}

Go实现

func yhTriangle(n int) [][]int {
var a = make([][]int,n)
for i := range a {
a[i] = make([]int,n);
}
a[0][n-1] = 1
for i := 1; i < n; i++ {
for j := 0; j < n; j++ {
if j == n-1 {
a[i][j] = 1
}else {
a[i][j] = a[i-1][j]+a[i-1][j+1]
}
}
}
return a
}