经典算法(5)杨辉三角

经典算法(5)杨辉三角杨辉三角是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。

大家好,又见面了,我是你们的朋友全栈君。

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

相关文章

点此查看 【算法系列】 博客文章


一、杨辉三角的介绍

百度百科对于杨辉三角是这样介绍的:
在这里插入图片描述

二、杨辉三角的算法思想

经典算法(5)杨辉三角(此图片来源于网络)

杨辉三角的两个腰边的数都是 1,从第3行起,除第一个数和最后一个数外,其它位置的数都是上顶上两个数之和。

三、代码实现

1.第一种写法

public class YangHuiTriangle1 { 
   
    public static void main(String[] args) { 
   
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入要打印的行数:");
        int n = scanner.nextInt();
        // 打印杨辉三角
        getTriangle(n);
    }

    /** * 打印杨辉三角 * * @param n 要打印的行数 * @return */
    private static int[][] getTriangle(int n) { 
   
        // 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
        int[][] array = new int[n][n];
        // 给数组元素赋值
        for (int i = 0; i < array.length; i++) { 
   
            // 每一行的值
            array[i] = new int[i + 1];
            // 给首末元素赋值
            array[i][0] = array[i][i] = 1;
            // 给每行的非首末元素赋值
            if (i > 1) { 
   
                for (int j = 1; j < array[i].length - 1; j++) { 
   
                    array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
                }
            }
        }
        // 遍历二维数组
        for (int i = 0; i < array.length; i++) { 
   
            for (int j = 0; j < array[i].length; j++) { 
   
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();
        }
        return array;
    }
}

代码执行结果:

输入要打印的行数:10
1	
1	1	
1	2	1	
1	3	3	1	
1	4	6	4	1	
1	5	10	10	5	1	
1	6	15	20	15	6	1	
1	7	21	35	35	21	7	1	
1	8	28	56	70	56	28	8	1	
1	9	36	84	126	126	84	36	9	1	

2.第二种写法

public class YangHuiTriangle2 { 
   
    public static void main(String[] args) { 
   
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入要打印的行数:");
        int n = scanner.nextInt();
        // 打印杨辉三角
        int array[][] = getTriangle(n);
        // 打印成等腰三角形
        printTriangle(array);
    }

    private static int[][] getTriangle(int n) { 
   
        // 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
        int[][] array = new int[n][n];
        // 给数组元素赋值
        for (int i = 0; i < array.length; i++) { 
   
            // 每一行的值
            array[i] = new int[i + 1];
            // 给首末元素赋值
            array[i][0] = array[i][i] = 1;
            // 给每行的非首末元素赋值
            if (i > 1) { 
   
                for (int j = 1; j < array[i].length - 1; j++) { 
   
                    array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
                }
            }
        }
        return array;
    }

    /** * 打印成等腰三角形 * * @param array */
    public static void printTriangle(int[][] array) { 
   
        for (int i = 0; i < array.length; i++) { 
   
            // 输出杨辉三角数字前面的空格
            for (int j = 0; j < array.length - 1 - i; j++) { 
   
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) { 
   
                // 用空格填补空位置
                System.out.print(" ");
                // 以十进制整数的形式输出,位宽是3,左对齐
                System.out.printf("%-3d", array[i][j]);
            }
            System.out.println();
        }
    }
}

代码执行结果:

输入要打印的行数:
10
                              1  
                           1     1  
                        1     2     1  
                     1     3     3     1  
                  1     4     6     4     1  
               1     5     10    10    5     1  
            1     6     15    20    15    6     1  
         1     7     21    35    35    21    7     1  
      1     8     28    56    70    56    28    8     1  
   1     9     36    84    126   126   84    36    9     1  

上一篇 经典算法(4)一文搞懂什么是 快速排序
下一篇 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法


由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133405.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月9日 上午7:16
下一篇 2022年6月9日 上午7:16


相关推荐

  • JAVAWEB酒店管理系统[通俗易懂]

    JAVAWEB酒店管理系统[通俗易懂]酒店管理系统分为前台和后台两个部分,其中后台供管理员管理系统之用,包括客房类型设置模块、客房设置模块以及操作员设置三个子模块,具体的功能模块如下。客房类型设置模块:该模块用来管理酒店的所有客房类型,包括新增客房类型、编辑已有客房类型、删除客房类型等功能。客房设置模块:该模块用来管理酒店的所有客房信息,包括新增客房、编辑已有客房、删除客房等功能。操作员设置模块:该模块用来管理酒店的操作员信息,包括新增操作员、编辑已有操作员信息、删除操作信息等功能。系统前台供酒店所有工作人员使用,包括入住登记模块、结账

    2026年2月20日
    4
  • 列式数据库简介

    列式数据库简介什么是列式数据库 列数据存储区也称为面向列的 DBMS 或列式数据库管理系统 列存储 DBMS 将数据存储在列而不是行中 关系数据库管理系统 RDBMS 将行中的数据和数据属性存储为列标题 基于行的 DBMS 和基于列的 DBMS 都使用 SQL 作为查询语言 但是面向列的 DBMS 可能会提供更好的查询性能 假设您需要根据 ID 列出表中的所有名称 而不是遍历所有行 您可以只访问表的单个列 以下是列数据存储 DBMS 的一些关键特性 列存储 DBMS 使用的键空间类似于 RDBMS 中的数据库架构 列存储 DBMS 具有称为列族的概

    2026年3月19日
    3
  • OpenClaw小龙虾在企业为何失灵?聊聊组织级AI智能体的三道墙

    OpenClaw小龙虾在企业为何失灵?聊聊组织级AI智能体的三道墙

    2026年3月13日
    3
  • 智能体|Workflow和Agent的区别与构建

    智能体|Workflow和Agent的区别与构建

    2026年3月16日
    5
  • matlab 心形曲线

    matlab 心形曲线1 有网格线 clearx 2 0 01 2 y sqrt 2 sqrt x 2 x 2 z asin abs x 1 pi 2 plot x y gridon holdon plot x z axisequal 效果图 2 无网格线 t 0 0 1 2 pi x 16 sin t 3 y 13 cos t 5 cos 2 t 2 co

    2026年3月19日
    1
  • 玩转挖矿:家庭矿机组装全攻略!

    玩转挖矿:家庭矿机组装全攻略!离上次发挖矿的教程已经过去两个多月了。这两个多月发生了什么事情呢?特斯拉买入15亿美刀BTC美图也不修图买BTC和ETH去了美国一大波ETF申请中加密币交易所coinbase快要上市了20多万一枚的比特币冲到了40万2100一张的二手1660s涨到4000多了…..这段时间我也没有闲着,断断续续收了十几张卡,装了三台矿机。趁着第一波投入已经回本的好心情,给大家分享一下装显卡矿机的经验。(不做投资建议,不送显卡,要不要高位站岗完全看你们自己!)我本来是没时间来.

    2025年8月22日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号