经典算法(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle函数之LAG函数[通俗易懂]

    Oracle函数之LAG函数[通俗易懂]语法使用方法  LAG是一个分析函数。它可以在不使用自连接的情况下同时访问到一个表的多行数据。给一个或多个列名和一个游标位置(位移),LAG可以访问当前行之前的行,行之间间隔的行数为位移值。  语法树中的offset(位移)参数是可选的,可以指定一个大于0的整数,如果不指定offset(位移)参数函数会默认位移为1。语法树中的default值也是可选的,这个default值是当位移值超过查…

    2025年8月27日
    6
  • 二进制数的减法计算_二进制乘法计算器

    二进制数的减法计算_二进制乘法计算器1、二进制减法:0-0=0,10-1=1(向高位借位)1-0=1,1-1=0(模二加运算或异或运算)。2、二进制的加法:0+0=0,0+1=1,1+0=1,1+1=10(向高位进位)。3、二进制的乘法:0*0=0 0*1=0,1*0=0,1*1=1。4、二进制的除法:0÷0=0,0÷1=0,1÷0=0(无意义),1÷1=1。扩展资料计算机采用二进制原因二进位计数制仅用两个数码。0和1,所以,任何具…

    2022年9月25日
    2
  • 手把手教你Charles抓包工具使用

    手把手教你Charles抓包工具使用Charles简介Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request,response和HTTPheaders(包含cookies与caching信息)。Charles主要功能支持SSL代理。可以截取分析SSL的请求。支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。支持AJ

    2022年4月28日
    66
  • 理解几种常见的进程间通信方式

    理解几种常见的进程间通信方式什么是进程间通信广义上讲,进程间通信(Inter-ProcessCommunication,IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点:参与通信的进程即可以运行在同一台机器上,也可以运行在各自的设备环境中(RemoteProcedureCallProtocol,RPC)。如果进程是跨机器运行的,则通常是由网络连接在一起。实现方

    2022年10月9日
    0
  • ipad越狱有什么坏处吗?_平板越狱有什么好处

    ipad越狱有什么坏处吗?_平板越狱有什么好处1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点?越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockd

    2022年9月2日
    4
  • 利用神器Typora+PicGo,实现有道云不用会员就可在Markdown自动上传图片

    本文是一篇工具的使用整理,希望能够帮助到你。欢迎关注公众号【Java编程技术乐园】,不止分享技术。文章目录01 开始02 实战安装`Picgo ` 配置+验证`Typora ` 配置+验证03 结束04 结束的尾巴01 开始阳春三月已过,感觉最近的天气是比较舒适的,在这个城市,湿冷的冬天过去,酷热的夏天未来,这样的日子持续的长一点就爽了。先简单梳理下之前分享过的文章:【教程】使…

    2022年2月28日
    111

发表回复

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

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