java如何实现杨辉
实现杨辉三角的方法
杨辉三角是一个经典的数学问题,可以通过多种方式在Java中实现。以下是几种常见的实现方法。
使用二维数组
通过二维数组存储杨辉三角的每一行数据,适用于需要预先计算并存储所有行的情况。

public class YangHuiTriangle {
public static void main(String[] args) {
int numRows = 5;
int[][] triangle = new int[numRows][];
for (int i = 0; i < numRows; i++) {
triangle[i] = new int[i + 1];
triangle[i][0] = 1;
triangle[i][i] = 1;
for (int j = 1; j < i; j++) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
for (int[] row : triangle) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
使用递归
递归方法可以简洁地生成杨辉三角的某一行或某个位置的数值,但效率较低。

public class YangHuiTriangleRecursive {
public static int getNumber(int row, int col) {
if (col == 0 || col == row) {
return 1;
}
return getNumber(row - 1, col - 1) + getNumber(row - 1, col);
}
public static void main(String[] args) {
int numRows = 5;
for (int i = 0; i < numRows; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(getNumber(i, j) + " ");
}
System.out.println();
}
}
}
优化空间复杂度
通过仅使用一维数组来存储当前行和上一行的数据,减少空间占用。
public class YangHuiTriangleOptimized {
public static void main(String[] args) {
int numRows = 5;
int[] prevRow = new int[numRows];
int[] currRow = new int[numRows];
for (int i = 0; i < numRows; i++) {
currRow[0] = 1;
currRow[i] = 1;
for (int j = 1; j < i; j++) {
currRow[j] = prevRow[j - 1] + prevRow[j];
}
for (int j = 0; j <= i; j++) {
System.out.print(currRow[j] + " ");
prevRow[j] = currRow[j];
}
System.out.println();
}
}
}
使用公式计算
杨辉三角中的每个数可以通过组合数公式计算,适用于需要直接计算某一行或某个位置的数值。
public class YangHuiTriangleFormula {
public static int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
public static int combination(int n, int k) {
return factorial(n) / (factorial(k) * factorial(n - k));
}
public static void main(String[] args) {
int numRows = 5;
for (int i = 0; i < numRows; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(combination(i, j) + " ");
}
System.out.println();
}
}
}
注意事项
- 递归方法虽然简洁,但对于较大的行数会导致性能问题。
- 使用二维数组的方法空间复杂度较高,但易于理解和实现。
- 优化空间复杂度的方法适合处理大规模数据。
- 公式计算适用于需要直接获取某个位置的数值,但阶乘计算可能导致整数溢出。





