2021-08-30 leetcode 数据结构 杨辉三角 II

杨辉三角 II

请添加图片描述
请添加图片描述

之前有做过杨辉三角| 可以按照之前的方法做然后根据输入再输出要求的那一行
但是 本题要求空间复杂度为O(n) 因此 上述方法不行 因为要开很多数组 空间复杂度会达到O(n方)
放一下杨辉三角前几项 以便后续观察理解

1
1 1
1 2 1
1 3 3 1

本题思路:定义 初始数组res[rowIndex+1] 且数组中每一个元素的初始值为1
以rowIndex=3 res[4]为例
注意 i的作用 也就是发生行的变化 即 迭代次数 为得到最终res 需要一行一行变化
j的作用 是将前一行的值相加 来覆盖数据 res[j]= res[j]+res[j-1]
我们发现
res最开始为[1,1,1,1] 在第一步变成“下一行”时(i=1),就用前两项相加将res[1]从1变成2 得到下一行
在这里插入图片描述

接着,为了再得到下一行 还需要重复相加过程 用相加得到的值来覆盖原来的值
从后往前加 再覆盖原始值,这样是为了不影响“上一行”

注意:以上操作是 当rowIndex >=2 的时候,反之 直接输出res

以下是AC代码

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> res(rowIndex+1,1);
        if(rowIndex < 2)
            return res;
        for(int i = 1; i < rowIndex; i++)
        {
            for(int j = i; j > 0; j--)
                res[j] = res[j] + res[j-1];
        }
        return res;
    }
};

//格式没问题吧 没问题的话hsz记得夸夸我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的Levi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值