LeetCode 118 题解--杨辉三角

杨辉三角

题目链接:https://leetcode.cn/problems/pascals-triangle/description/

杨辉三角是一个不仅在数学中非常经典的例题,还是在编程中也是一个比较经典的问题,下面就来看看这道题吧!

我们可以看到的是杨辉三角就是一个典型的三角形,并且每行每列元素都有元素!那么我们就会先想到的是一个典型二维数组

这个时候我们看到一个陌生的返回类型;这是一个典型的类似于二维数组的顺序表,底层是一个二维的数组

那么我们可以画一个草图来进行帮助大家理解:

这种就是相当于实例化了两个ArrayList的类,以第一个类为底,再去实例化一个类,再通过add方法,把第二个实例化ArrayList的类添加进去这样就可以进行实现了二维的顺序表!

但是我们明白了它是一个二维数组,可是我们怎么实现了这种对称的等腰三角形呢?

答案是:一般无法在控制台实现,但是我们可以把它看成一个直角三角形

我们会发现它是一个不规则的数组,所以这个时候就要用动态数组(即是顺序表)来解决问题。

这个时候我们再来看杨辉三角的特点:

  1. 首尾项都是1
  2. 中间某项的元素是上一行同一列的元素与上一行同前一列的元素的和

只要按照这个思路去解决问题即可;

完整代码如下:

java 复制代码
class Solution {
    public List<List<Integer>> generate(int numRows) {
        //我们明白了list<list<Integer>是返回的是二维动态数组 即是顺序表
        List<List<Integer>> ret = new ArrayList<>();
        
        List<Integer> list0 = new ArrayList<>();
        list0.add(1);//第一行只有一个元素
        ret.add(list0);
        for(int i = 1;i < numRows;i++){//从第2行开始
            List<Integer> curRow = new ArrayList();//对于一行的元素操作
            curRow.add(1);
            
            List<Integer> preRow = ret.get(i-1);
            
            for(int j = 1;j < i;j++){
                int val1 = preRow.get(j);
                int val2 = preRow.get(j-1);
                curRow.add(val2 + val1);
            }
            
            curRow.add(1);
            ret.add(curRow);
        }
        
        return ret;
    }
}
相关推荐
better_liang1 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本1 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
圣保罗的大教堂2 小时前
leetcode 2540. 最小公共值 简单
leetcode
小马爱打代码2 小时前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
better_liang2 小时前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
RyFit2 小时前
Java + AI 实战:Spring AI 从入门到企业级落地
java·人工智能·spring
Raink老师2 小时前
【AI面试临阵磨枪-69】如何设计一个支持百万级工具的 Agent 系统?如何快速路由与选择工具?
人工智能·面试·职场和发展
云泽8083 小时前
笔试算法 -位运算篇(二):从唯一字符到消失数字
c++·算法·位运算
ʚ希希ɞ ྀ3 小时前
不同路径|| -- dp
算法
ZhengEnCi3 小时前
01-如何监听接口调用情况?
java·spring boot·后端