题外话
先给大家露一手我对杨辉三角的理解,虽说标题是庖丁解牛,但是还是虚心请教一下大家,有什么意见都可以提出!
正题
思维逻辑
先画个杨辉三角,有几点需要大家注意一下
1.杨辉三角其实在代码里就是一个二维数组,图中i代表行但是是从0开始的,而j
则代表每行的元素
2.如果想用ArrayList做到二维数组,需要把行和每一行的元素拆开,也就是"解牛"
大家一定要把这个图逻辑看懂,事半功倍!!!
代码内容及思维注释
package ArrayListTest; import java.util.ArrayList; import java.util.List; public class ArrayList01 { //杨辉三角 public List<List<Integer>> generate(int numRows) { //先创建List<List<Integer>> ret相当于一个二维数组 List<List<Integer>> ret = new ArrayList(); //1.先处理第一行,创建ret当做第一行 List<Integer> list = new ArrayList(); list.add(1); //3.把第一行加入到二维数组 ret.add(list); //4.从第二行开始进行元素添加,i表示行的下标,j表示当前行的元素下标 for (int i = 1; i <numRows;i++) { //5.创建一个curRow表示当前行要添加的元素 List<Integer> curRow=new ArrayList<>(); //6.当前首元素是1,把1添加进去 curRow.add(1); //7.当前除去第一个元素和最后一个元素是1,剩下的每个元素是[i-1][j-1]+[i-1][j] List<Integer> preRow=ret.get(i-1); for (int j=1;j<i;j++) { //6.把中间每一个元素的值放入val,再把val的值放入当前行内 int val=preRow.get(j)+preRow.get(j-1); curRow.add(val); } //8.把当前行末尾元素1加入curRow curRow.add(1); //9.把当前行加入到二维数组当中 ret.add(curRow); } //杨辉三角打印,其实也是把每一行和行内元素拆开遍历,先打印出第一行唯一元素1 System.out.print(ret.get(0).get(0)); //利用循环把每一行元素打印出来 for (int i=1;i<numRows;i++) { //打印完每一行都需要换行 System.out.println(); //这里其实和添加元素一样,要先把每一行单拿出来,然后把行内元素一个一个进行打印 List<Integer> list1=ret.get(i); for (int j=0;j<=i;j++) { //打印元素并加空格,更具体形象 System.out.print(list1.get(j)+" "); } } return ret; } }
最后给大家看看运行截图
小结
欲买桂花同载酒,
终不似,
少年游.
大学就应该提升代码技术,努力学习编程,未来属于我们全体程序员!!
标签:庖丁解牛,int,ArrayList,元素,List,ret,杨辉三角 From: https://blog.csdn.net/weixin_67836079/article/details/136750110