首页 > 其他分享 >数据结构ArrayList之杨辉三角庖丁解牛!

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

时间:2024-03-17 16:00:52浏览次数:14  
标签:庖丁解牛 int ArrayList 元素 List ret 杨辉三角

题外话

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

正题

思维逻辑

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

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

相关文章

  • java集合框架——List集合概述及ArrayList,LinkedList的区别
    前言:List系列集合是Collection集合中两个系列的其中一个,整理下笔记。打好基础,daydayup!需要了解Collection的,可以看这篇java集合框架——Collection集合概述  List系列集合List系列集合的特点为添加的元素有序,可重复,有索引。在继承了Collection方法的基础上,有很多索引......
  • 河北王校长源码之ArrayList
    ArrayListy类结构继承AbstractList实现Listlist基本方法实现RandomAccess支持随机访问(下标)for效率高于迭代器(对比LinkedList)实现Cloneable浅克隆实现Serializable序列化成员变量默认容量privatestaticfinalintDEFAULT_CAPACITY=10;空数组......
  • List集合-Arraylist
    Arraylist创建集合packageeight.list.arraylist;importjava.util.ArrayList;importjava.util.List;publicclassStudent{publicstaticvoidmain(String[]args){//创建集合//Listaa=newArrayList();ArrayListaa=newAr......
  • ArrayList和LinkedList底层原理的区别和使用场景
    (1)ArrayList底层是动态数组,查询快、增删慢。存储空间是连续的,可以根据寻址方式直接找到对应的元素位置,所以查询时间复杂度是o(1)。扩容:ArrayList支持动态扩容,在每次新增元素的时候会判断容量是否溢出,如果溢出则会进行扩容操作。当size=elementData.length时,表示数据数量已经超过......
  • 杭电OJ 2032杨辉三角
    杨辉三角杨辉三角形这一题型,属于分治法,如果我们使用递归来处理,可以解决但是时间复杂度太高,为\(O(2^n)\),会超时错误,所以应该用递推法,一行一行的把值保存下来,减少大量的重复计算,这样时间复杂度为\(O(n)\),还不错。当然解题思路,无论是递归还是递推,都是一样的,总结递归公式、及递归出......
  • Java ArrayList 与 LinkedList 的灵活选择
    JavaArrayListJavaArrayList类是一个可变大小的数组,位于java.util包中。创建ArrayListimportjava.util.ArrayList;ArrayList<String>cars=newArrayList<String>();//创建一个ArrayList对象添加元素cars.add("Volvo");cars.add("BMW");cars.add(......
  • 2.ArrayList
    集合是什么,有什么特点?一种容器,用来存储数据集合的大小可变ArrayList是什么?怎么使用?是集合中最常用的一种,ArrayList是泛型类,可以约束存储的数据类型创建对象,调用无参数构造器初始化对象:publicArrayList();调用相应的增删改查数据的方法ArrayList提供了哪些常用的方法......
  • JAVA API:ArrayList应用案例
    packagecom.itheima.ArrayList;importjava.util.ArrayList;publicclassDemo2{publicstaticvoidmain(String[]args){ArrayList<String>list=newArrayList<>();list.add("Java入门");list.add("宁夏枸杞&......
  • JAVA API:ArrayList(泛型类)基本使用
    ArrayList代表的是一种集合,一种容器,类似于数组。 容器主要操作:增删改查   packagecom.itheima.ArrayList;importjava.util.ArrayList;importjava.util.List;publicclassdemo{publicstaticvoidmain(String[]args){ArrayListlist=new......
  • ArrayList底层原理
    JDK版本11ArrayList类声明其中RandomAccess、Cloneable、Serializable都是标记接口,用来表示ArrayList支持随机读取、克隆和序列化反序列化。ArrayList集合添加元素底层原理利用空参创建集合,在底层创建一个默认长度为0的数组。添加第一个元素时,底层会创建一个新的长度为10......