1.暴力解法
设二维数组存储元素,并利用A[i][j]=A[i-1][j-1]+A[i-1][j]
代码如下:
class Solution {
public:
vector<int> getRow(int rowIndex) {
if(rowIndex==0)
return {1};
vector<vector<int>> res (rowIndex+1,vector<int>(rowIndex+1,0));
res[0][0]=1;
res[1][0]=1;
res[1][1]=1;
for(int i=2;i<=rowIndex;i++)
for(int j=0;j<=i;j++)
if(j==0||j==i)
res[i][j]=1;
else
res[i][j]=res[i-1][j-1]+res[i-1][j];
return res[rowIndex];
}
};
2.观察法
用一维数组存储结果
观察第0行 1
观察第1行 1 1 //是在上一行后面添加了1
观察第2行 1 2 1 // 是在上一行后面加1,此时数组为1 1 1,令A[1]=A[0]+A[1],即2=1+1,
观察第3行 1 3 3 1 //首先在上一行末尾加1,此时数组为 1 2 1 1,令A[2]=A[1]+A[2]=2+1=3,A[1]=A[0]+A[1]=1+2=3
第四行 1 4 6 4 1 //在上一行末尾加1,1 3 3 1 1,A[3]=A[2]+A[3]=3+1=4,A[2]=A[1]+A[2]=3+3=6,A[1]=A[0]+A[1]=1+3=4
....
之后的每一行,首先在数组末尾添加元素1,
然后对于该行,如果不是第一个或最后一个元素,设为j元素,则A[j]=A[j-1]+A[j]
代码如下:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res;
for(int i = 0; i <= rowIndex; ++i){
res.push_back(1);
for(int j = i - 1; j > 0; --j){
res[j] += res[j - 1];
}
}
return res;
}
};
3.数学公式法
杨辉三角可以看成由组合数构成
其中:
且:
此时,设置pre保存上一次的结果,然后遍历即可
代码如下:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res;
long pre=1;
res.push_back(1);
for(int i = 1; i <= rowIndex; ++i){
long cur=pre*(rowIndex-i+1)/i;
res.push_back((int)cur);
pre=cur;
}
return res;
}
};