当前位置:首页 > 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自动登录如何实现

Vue 自动登录实现方法 自动登录通常通过结合前端(Vue)和后端(如Token验证)实现,核心逻辑是持久化存储用户凭证(如Token),并在应用初始化时自动验证。 使用本地存储保存Token 将登…

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model实…

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…

java如何下载

java如何下载

下载Java的步骤 访问Oracle官方网站或OpenJDK项目页面下载Java开发工具包(JDK)。Oracle JDK适用于商业用途,OpenJDK为开源版本。 打开浏览器,进入Oracle J…

如何实现java序列化

如何实现java序列化

实现Java序列化的方法 1. 实现Serializable接口 要使一个类可序列化,需要让该类实现java.io.Serializable接口。这是一个标记接口,没有任何方法需要实现。 publi…

java如何连接mysql数据库

java如何连接mysql数据库

连接 MySQL 数据库的步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,可以在 pom.xml 中添加以下依赖: <dependency…