杨辉三角形算法(java实现)

杨辉三角形实现:
一、杨辉三角形特点:


1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

….

如上,就是一个6行的杨辉三角形。

特点如下:

1.每一行的第一个元素和最后一个元素都是1

2.第n行的元素是n个

3.每一行除首尾元素外,任一元素满足:[i][j]=[i-1][j-1]+[i-1][j](i代表行,j代表列)

二、知名老师的实现方式

最近在网上看到一名知名培训老师实现杨辉算法的方式,想来帮他分析一下《杨辉三角形算法(java实现)》。他的实现代码如下:

public class TestYangHui { public static void main(String[] args) { int[][] yangHui = new int[10][]; //1.初始化二维数组 for(int i = 0;i < yangHui.length;i++){ yangHui[i] = new int[i + 1]; } //2.显式的为二维数组的每个元素赋值 for(int i = 0;i < yangHui.length;i++){ for(int j = 0;j < yangHui[i].length;j++){ yangHui[i][0] = yangHui[i][i] = 1;//① if(i > 1 && j > 0 && j < i){ //② yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1]; } } } //遍历二维数组 for(int i = 0;i < yangHui.length;i++){ for(int j = 0;j < yangHui[i].length;j++){ System.out.print(yangHui[i][j] + "\t"); } System.out.println(); } } } 

看着是不是头都大了??不急,我们慢慢来分析下。

总体看,这个老师用了三组for循环。第一组for循环是用于初始化二维数组,第二组for循环用于填充二维数组,第三组for循环用于遍历输出二维数组。用了这么多for循环,可想而知这个简单算法的执行效率有多么慢。

再来看标红的地方。①处的目的是想把杨辉三角形每一行的首尾元素都填充1,②处的目的是将剩余的元素按[i][j]=[i-1][j-1]+[i-1][j]规律填充。这样写虽然可以实现功能,但是明显增加了算法的复杂程度。

三、杨辉算法的简易实现

下面是我的代码:

public class Test { //演示杨辉三角算法 public static void main(String[] args) { yanghui(10); } /** * * @param line:指定杨辉三角形的行数 */ public static void yanghui(int line) { int[][] m=new int[line][];//声明二维数组 for(int i=0;i<m.length;i++) { m[i]=new int[i+1];//对二维数组初始化 for(int j=0;j<=i;j++) { int end=m[i].length-1;//最后一个元素 if(j==0||j==end) { m[i][j]=1; }else { m[i][j]=m[i-1][j-1]+m[i-1][j];//核心算法 } System.out.print(m[i][j]+" "); } System.out.println(); } } }

我这个代码用一组for循环就可以实现二维数组的初始化、赋值、输出。而且实现算法是适用于每一行的,即不管是哪一行,只要遇到开头元素和结尾元素都是1,剩下的就按另一个规律处理。此外,通过传参的方式声明二维数组,增加了该算法的灵活性。

如有不妥的地方,欢迎指正哦

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/dahai2051/article/details/78610327
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞