经典算法:杨辉三角
作者:互联网
这算然是个等边三角形,但是我们可以想像成为一个直角三角形,如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
不难发现,除了第一列和diagonal,其实每个数字都是上一行的上面一个与前面一个数字的和。
也就是ans[i-1][j-1]+ans[i-1][j]
所以我们可以利用这个关系来写出代码。
ans[i-1]为上面一行,这个比较好理解。
我们初始化temp的值为1,这样diagonal和第一列都有了初始化值
我们只需要以以上的关系去将中间的部分设值就好了
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ans;
for(int i = 0; i < numRows; ++i){
vector<int> temp(i+1, 1);
for(int j = 1; j < i; ++j)
temp[j] = ans[i-1][j-1]+ans[i-1][j];
ans.push_back(temp);
}
return ans;
}
};
等我考完试来介绍一下他的进阶版
标签:temp,int,经典,diagonal,numRows,算法,vector,ans,杨辉三角 来源: https://blog.csdn.net/qq_48322523/article/details/115263334