一、 杨辉三角
题目描述
给定一个非负整数 *
numRows
,*生成「杨辉三角」的前numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
思路分析
递推公式:a [i] [j]=a [i-1] [j-1]+ a[i-1] [j]; 特别地若j=0 或者 i=j a[i] [j]=1;
具体代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> a(numRows);
for(int i=0;i<numRows;i++){
a[i].resize(i+1);
for(int j=0;j<=i;j++){
if(j==0 || i==j) a[i][j]=1;
else a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
return a;
}
};
二、杨辉三角II
题目描述
给定一个非负索引
rowIndex
,返回「杨辉三角」的第rowIndex
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
思路分析
递推公式与上一题一样,输出第rowIndex 行即可。
具体代码
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int>> a(35);
for(int i=0;i<=rowIndex;i++){
a[i].resize(i+1);
a[i][0]=a[i][a[i].size()-1]=1;
for(int j=1;j<a[i].size()-1;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
vector<int> ans(rowIndex+1);
for(int i=0;i<=rowIndex;i++){
ans[i]=a[rowIndex][i];
}
return ans;
}
};