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


相关推荐

  • java数据库连接池有哪些_常用的数据库连接池

    java数据库连接池有哪些_常用的数据库连接池池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是…

    2022年9月17日
    2
  • 3极管原理图_二极管图解

    3极管原理图_二极管图解“晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件”在电子元件家族中,三极管属于半导体主动元件中的分立元件。广义上,三极管有多种,常见如下图所示。狭义上,三极管指双极型三极管,是最基础最通用的三极管。本文所述的是狭义三极管,它有很多别称:三极管的发明晶体三极管出现之前是真空电子三极管在电子电路中以放大、开关功能控制电流。真空电子管存在笨重、耗能、反应慢等缺点。二战时,军事上急切需要一种稳定可靠、快速灵敏的电信号放大元件,研究成果在二战

    2022年10月7日
    4
  • IP地址分类详解

    IP地址分类详解一、IP地址简介IP,即网际协议(InternetProtocol),或称互联网协议,是用于报文交换网络的一种面向数据的协议。IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP定义了寻址方法和数据报的封装结构,即IP地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以

    2022年6月9日
    38
  • 955 不加班的公司名单:955.WLB

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 数据来源:https://github.com/formulahendry/955.WLB 与 996.ICU 相呼…

    2021年6月27日
    101
  • linux怎么查看系统环境变量路径,Linux系统中的环境变量该如何设置与查看

    linux怎么查看系统环境变量路径,Linux系统中的环境变量该如何设置与查看今天小编要跟大家分享的文章是关于Linux系统中的环境变量该如何设置与查看。大家都知道,在Linux系统中,有环境变量和Shell变量这两种变量。环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息。而Shell变量仅在当前Shell中可用,可以用来存储当前用户的ID等信息。那么什么是环境变量,什么是Shell变量…

    2022年10月1日
    3
  • Base64 转图片「建议收藏」

    Base64 转图片「建议收藏」Base64编码与图片互转/****版权所有:2016项目名称:ImgeBase64**类描述:将图片转化为Base64字符串类名称:cn.sanishan.util.Base64Img**@versionV1.0*/publicclassBase64Img{//将图片文件转化为字节数组字符串,并对其进行Base64编码处理…

    2022年9月15日
    3

发表回复

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

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