• LeetCode第118题—杨辉三角


    本次写的题目是杨辉三角,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎

    🌱分析阶段

    首先第一眼见到题目:

    注意到返回的类型很古怪,不是我们常见的形式👇

     先研究这个 List> ,我们都知道List的底层为数组,那么见到这种数组里面放入数组的,是不是可以画个图表示一下?

    这就是 List> 的图示相当于一个总数组,总数组里面的每一个位置上都装着一个子数组。

    再看到图示,看看有没有什么受到启发的地方😎:

     好像.....

    将左边的图旋转之后... 

     这样可不就是相当于杨辉三角上面的每一层都对应总数组上的一个位置,然后每一层都可以看作是一个子数组,装着当层杨辉三角的数据😎

    这下便了然了 

     

     然后将杨辉三角的位置都移动一下,变成更加容易看的形式:

     我们都知道,杨辉三角是每一层头尾都为1,然后每层中除了头和尾以外的数据都是由每一层的都是由上一层的数据相加而成

    📢总结:所以,现在我们需要完成三件事:①写出一个总数组    ②写出一个循环,每一次循环就能完成一层子数组并放入    ③子数组要怎么样填充好


    🌱①写出一个总数组

    按照要求,我们能够很快的写出一个数组,该数组能够接收的类型是List类型,于是写出下列代码👇

    List> total = new ArrayList<>(numRows);

     而杨辉三角的第一层只有一个数据1,所以我们直接创造一个List放入1之后装进这个总数组内👇

    1. class Solution {
    2. public List> generate(int numRows) {
    3. List> total = new ArrayList<>(numRows);
    4. List first = new ArrayList<>();
    5. first.add(1);
    6. total.add(first);
    7. }
    8. }

     这样就成功把第一层放入了。


    🌱②写循环并每次完成一层子数组

    首先写一个循环,由于我们已经在总数组下标为0上的位置放入了杨辉三角的第一层,于是要从杨辉三角的第二层开始,也就是总数组的下标为1的位置上开始,而同时要满足每一层的头和尾要为1,所以写出下面的代码👇

    1. class Solution {
    2. public List> generate(int numRows) {
    3. List first = new ArrayList<>();
    4. first.add(1);
    5. List> total = new ArrayList<>(numRows);
    6. total.add(first);
    7. for(int i = 1; i < numRows; i++){ //从总List的下标1位置开始,一直循环到目标层数
    8. List cur = new ArrayList<>(); //创建每一层的List
    9. cur.add(1); //增加头元素
    10. for(//这里先空着,过会儿用于填充每一层的中间元素){
    11. //这里先空着
    12. }
    13. cur.add(1); //增加尾元素
    14. total.add(cur); //把完成后的当层放入总数组List里面
    15. }
    16. return total; //返回总数组
    17. }
    18. }

    🌱③完成每一层的中间元素

    每一层的中间元素都需要获得上一层的对应位置的数据相加而得,而要获得上一层对应位置的数据,要使用List中的get函数

     首先需要得到总数组内的上一层子数组,然后再从子数组里面得到对应位置的数据相加,就需要用到两个get👉total.get(i-1).get(j-1)  与  total.get(i-1).get(j)

    于是便得到了下面的代码👇

    1. class Solution {
    2. public List> generate(int numRows) {
    3. List first = new ArrayList<>();
    4. first.add(1);
    5. List> total = new ArrayList<>(numRows);
    6. total.add(first);
    7. for(int i = 1; i < numRows; i++){ //从总List的下标1位置开始,一直循环到目标层数
    8. List cur = new ArrayList<>(); //创建每一层的List
    9. cur.add(1); //增加头元素
    10. for(int j = 1; j < i; j++){
    11. int str = total.get(i-1).get(j-1) + total.get(i-1).get(j);
    12. cur.add(str);
    13. }
    14. cur.add(1); //增加尾元素
    15. total.add(cur); //把完成后的当层放入总数组List里面
    16. }
    17. return total; //返回总数组
    18. }
    19. }

    综上,所有代码都完成啦😆让我们来跑一遍试一下吧😎

     nice😎✨

  • 相关阅读:
    没有项目管理经验,可以参加PMP考试么?
    math_高数公式每日一过_part2(private)
    数据库 MySql快速导入外部数据库流程
    【详解+安装失败解决】Win11系统装CH340驱动方法
    10个PyCharm常用的免费插件,让开发迅速飙升
    kong 和konga网关部署及使用
    python自动化面试常见排序算法解析
    为什无线网络连上去了还是没有网络?
    【Java】微服务——Ribbon负载均衡(跟进源码分析原理)
    理解Nginx反向代理详解
  • 原文地址:https://blog.csdn.net/Green_756/article/details/126228511