当前位置: 首页 > news >正文

杨辉三角解法

方法一(递归):

package org.example;

public class E03PascalTriangle {
    private static int element(int i,int j){
        if(j==0||i==j){
            return 1;
        }
        return element(i-1,j-1)+element(i-1,j);
    }

    private static void printSpace(int n,int i){
        int num=(n-1-i)*2;
        for (int j=0;j<num;j++){
            System.out.print(" ");
        }
    }

    public static void print(int n){
        for (int i = 0; i < n; i++) {
            printSpace(n,i);
            for (int j=0;j<=i;j++){
                System.out.printf("%-4d", element(i,j));
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        //System.out.println(element(4,2));
        print(5);
    }
}
System.out.printf("%-4d", element(i,j));

-左对齐,4d是四个字符串的位置

缺点:时间复杂度高(2的n次幂)

优化思路:使用记忆法,把杨辉三角的值记录下来,使用二维数组(复杂度:n的平方)

package org.example;

public class E03PascalTriangle {
    private static int element1(int[][] triangle,int i,int j){
        if(triangle[i][j]>0){
            return triangle[i][j];
        }

        if(j==0||i==j){
            triangle[i][j]=1;
            return 1;
        }
        triangle[i][j]=element1(triangle,i-1,j-1)+element1(triangle,i-1,j);
        return triangle[i][j];
    }

    private static void printSpace(int n,int i){
        int num=(n-1-i)*2;
        for (int j=0;j<num;j++){
            System.out.print(" ");
        }
    }

    public static void print(int n){
        int[][] triangle =new int[n][];

        for (int i = 0; i < n; i++) {//行,每次循环行的时候,确定列数
            triangle[i]=new int[i+1];//第i行,列数有第i+1列,这样二维数组初始值就都有了
           // printSpace(n,i);
            for (int j=0;j<=i;j++){
                System.out.printf("%-4d", element1(triangle,i,j));
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        //System.out.println(element(4,2));
        print(5);
    }
}

优化2:使用一维数组,也叫动态规划法

 public static void createRow(int[] row,int i){
        if(i==0){
            row[0]=1;
            return;
        }
        for(int j=i;j>0;j--){
            row[j]=row[j]+row[j-1];
        }
    }
    public static void print2(int n){
        int[] row=new int[n];
        for (int i = 0; i < n; i++) {//行,每次循环行的时候,确定列数
         createRow(row,i);
            // printSpace(n,i);
            for (int j=0;j<=i;j++){
                System.out.printf("%-4d", row[j]);
            }
            System.out.println();
        }
    }

相关文章:

  • BambuStudio学习笔记:MeshBoolean类
  • C#+Halcon 检测稳定性提升的方式
  • docker:配置 Docker 镜像加速器
  • 计算机毕业设计SpringBoot+Vue.js校园网上店铺(源码+文档+PPT+讲解)
  • Webpack分包与合包深度解析
  • 面试基础--Spring Boot启动流程及源码实现
  • 【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
  • 全网独家:zabbixV7版本容器服务器无法访问Postgres V17数据库的问题解决
  • 启智平台华为昇腾910B 运行DeepSeek Janus-Pro-7/1B
  • 高并发应用分层架构
  • C#调用Ni板卡进行实现采集任务(模拟量输入输出)示例1
  • 分布式事务【整理、总结】
  • 请解释 HTTP 中的状态码,常见的状态码有哪些?
  • C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)
  • MyBatis框架之映射文件加载方式
  • Notepad++ 8.6.7 安装与配置全攻略(Windows平台)
  • Python-04BeautifulSoup网络爬虫
  • IO学习day3
  • 【Java 基础】-- 设计模式
  • SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决
  • 劳动仲裁院内部网站建设/推广普通话
  • 黔西南北京网站建设/百度秒收录软件工具
  • 网站建设价格a去找真甲先生/百度首页纯净版怎么设置
  • 中山品牌网站建设报价/新闻近期大事件
  • 城市旅游网站开发/怎么在网上推广产品
  • 怎么推广公司网站/淘宝关键词工具