当前位置:首页 > Java

java如何实现杨辉

2026-03-18 21:09:41Java

实现杨辉三角的方法

杨辉三角是一个经典的数学问题,可以通过多种方式在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();
        }
    }
}

使用递归

递归方法可以简洁地生成杨辉三角的某一行或某个位置的数值,但效率较低。

java如何实现杨辉

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();
        }
    }
}

注意事项

  • 递归方法虽然简洁,但对于较大的行数会导致性能问题。
  • 使用二维数组的方法空间复杂度较高,但易于理解和实现。
  • 优化空间复杂度的方法适合处理大规模数据。
  • 公式计算适用于需要直接获取某个位置的数值,但阶乘计算可能导致整数溢出。

分享给朋友:

相关文章

vue如何实现两栏布局

vue如何实现两栏布局

使用 Flexbox 实现两栏布局 通过 Flexbox 可以快速实现两栏布局,适合现代浏览器。在 Vue 的模板中,使用 display: flex 和 flex 属性控制两栏的宽度比例。 <…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.definePr…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

java如何输出

java如何输出

输出到控制台 使用 System.out.println() 方法输出内容到控制台,适用于调试或简单信息展示。 示例代码: System.out.println("Hello, World!")…

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div>…