顺序表 —— OJ题

在上一篇文章中简单介绍了顺序表,这一篇文章讲解下一个比较经典的题:

杨辉三角

先看一下什么是杨辉三角

下面解释:

大概就是这个规律。而 ta 其实就是二维数组 即:

java 复制代码
0  1
1  1 1
2  1 2 1
3  1 3 3 1
4  1 4 6 4 1

然后看一下这个题的要求:

意思是 numRows 一个非负数(整数),在根据 numRows 里的整数生成 【杨辉三角 】的"层数"

这是ta给的方法体:

这里的 List <List<Integer>>这个边讲边说

下面说一下 这道题如何解:

首先是步骤:

如果你仔细观察这个图就会发现 ta 的头值和尾值都是 1 而中间的都是运算来的

所以可以将这道题分为 头 中 尾 三部分处理

头 尾处理比较简单难点是 中 的处理,这时候 再仔细观察 中间的值,是如何得出来的,你会发现:

java 复制代码
0  1
   0

1  1 1
   0 1

2  1 2 1
   0 1 2

3  1 3 3 1
   0 1 2 3 

4  1 4 6 4 1
   0 1 2 3 4

所有的中间值都是由 上一个数组以下标 0 + 1 | 1 + 2 | 2 + 3 
的规律得出下一个数组 1下标 2下标 3下标 的值  如4数组:1下标 = 1+3 、2下标 = 3 + 3 、3下标 = 3+1

就可以这样写:
i = 数组
while(ture){
j = 0;
int val = i[j] + i[j+1];
j++;
}

但这时候问题又出现了,以杨辉三角的规律不是那个数组,都有 1 2 3 下标的,这时候就要找条件

的要求了 这时候再仔细看一下图:

java 复制代码
0  1
   0

1  1 1
   0 1

2  1 2 1
   0 1 2

3  1 3 3 1
   0 1 2 3 

4  1 4 6 4 1
   0 1 2 3 4

会发现数组2需要加1次
数组3需要加2次
数组4需要加3次
后面相加的次数依次+1
只有 numRows 等于3时中间值需要加1次,4时加2次.......

这个题最好用顺序表解决 下面看代码:

java 复制代码
public List<List<Integer>> generate(int numRows) {
        List<Integer> list = new ArrayList<>();
        //List<List<Integer>> ta 的意思就是如果你存放数组(顺序表的底层是数组)的地址
        //会给这个地址放上 下标  ret是要返回的
        List<List<Integer>> ret = new ArrayList<>();
        //处理一层
        list.add(1);
        ret.add(list);
        //处理二层以上
        for(int i = 1; i<numRows; i++){

            //头
            List<Integer> cj = new ArrayList<>();
            cj.add(1);

            //中
            //这里的 get 拿的是数组的整个地址
             List<Integer> zo = ret.get(i-1);
            //只有numRows 为3及以上才会运算
            for(int j = 0; j<i-1; j++){
                int val = zo.get(j) + zo.get(j+1);
                cj.add(val);
            }

            //尾
            cj.add(1);
            ret.add(cj);
        }
        return ret;
    }
List <List<Integer>>:

最后提交一下:

下一篇文章是 单向 无头 不循环链表

相关推荐
YuTaoShao1 小时前
【LeetCode 每日一题】1277. 统计全为 1 的正方形子矩阵
算法·leetcode·矩阵
古译汉书1 小时前
嵌入式铁头山羊stm32-ADC实现定时器触发的注入序列的单通道转换-Day26
开发语言·数据结构·stm32·单片机·嵌入式硬件·算法
野犬寒鸦1 小时前
力扣hot100:相交链表与反转链表详细思路讲解(160,206)
java·数据结构·后端·算法·leetcode
阿昭L1 小时前
leetcode两数之和
算法·leetcode
周树皮不皮1 小时前
【Leetcode100】算法模板之二叉树
算法
无名客02 小时前
sentinel限流常见的几种算法以及优缺点
算法·sentinel·限流
Moonbit2 小时前
月报Vol.03: 新增Bitstring pattern支持,构造器模式匹配增强
后端·算法·github
快手技术2 小时前
多模态大模型Keye-VL-1.5发布!视频理解能力更强!
算法
薛定谔的算法3 小时前
JavaScript数组操作完全指南:从基础到高级
前端·javascript·算法
可爱的小小小狼3 小时前
算法:位运算
算法