数据结构ArrayList之杨辉三角庖丁解牛!

题外话

先给大家露一手我对杨辉三角的理解,虽说标题是庖丁解牛,但是还是虚心请教一下大家,有什么意见都可以提出!

正题

思维逻辑

先画个杨辉三角,有几点需要大家注意一下

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;
    }
}

最后给大家看看运行截图

小结

欲买桂花同载酒,

终不似,

少年游.

大学就应该提升代码技术,努力学习编程,未来属于我们全体程序员!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值