#LC118 : 杨辉三角

0.废话

今天时间不是很充足,上了一天的课,明天还是一天的课…
制定的计划又被拉肚子和思想政治教育打乱了,估计今晚要熬夜了…
所以就找了一个简单的写一写

1.题目要求

传送门
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

2.题目思路

杨辉三角这道题在我上数据结构课上讲过,这种层次性很明显的最适合用队列了
这道题的技巧在于在每一行的最后加一个0,这样就不用故意在开头和结尾 设置两个1了
对于已经存放好的第i行,比如第一行1
令s = 0,t从队列中取出,s+=t(s=1),然后将s放到返回的数组中(至于分组问题,就用for循环嵌套),再s = t,t再从队列中取出
算法复杂度在于双重for循环也就是O(n^2)

3.代码
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        if(numRows==0)
        return {};
        vector<vector<int>> v{ {1} };
        if (numRows == 1)
            return v;
        queue<int> q;
        vector<int> temp;
        int s = 0;
        int t;
        q.push(1);
        for (int i = 1; i < numRows; i++)
        {
            q.push(0);
            for (int j = 0; j < i + 1; j++)
            {
                t = q.front();
                q.pop();
                s += t;
                q.push(s);
                temp.push_back(s);
                s = t;
            }
            v.push_back(temp);
            temp.clear();
        }
        return v;
    }
};

今天感触比较深,感觉自己不努力就真的晚了,还有很多心里话,就不在这里说了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值