这算然是个等边三角形,但是我们可以想像成为一个直角三角形,如下:
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;
}
};
等我考完试来介绍一下他的进阶版