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;
}
};
今天感触比较深,感觉自己不努力就真的晚了,还有很多心里话,就不在这里说了。。。