杨辉三角大家熟悉不过,不多赘述。
class Solution {
public:
int value(int rowIndex,int row){
if(rowIndex==0)
return 0;
if(row==0||row==rowIndex)
return 1;
else
return value(rowIndex-1,row-1)+value(rowIndex-1,row);
}
vector<int> getRow(int rowIndex) {
//思路:很明显,最简单的方法是储存杨辉三角,然后输出第rowindex行
//当然也明显超时,其余可以直接借助于递归输出第rowindex行
//递归:只要还能分解就往上分解,直至走到第二行
vector<int>a(rowIndex+1);
for(int i=0;i<rowIndex+1;i++){
if(i==0||i==rowIndex)
a[i]=1;
else
a[i]=value(rowIndex,i);
}
return a;
}
};
(value中的row应是colindex)
当然我这里是开玩笑的,这个递归明显和直接储存的时间复杂都一个样。(虽然做的不对,但也是证明我递归至少初步掌握了)
参考评论区大佬的做法,是在我们学习斐波那契额数列的时候接触的迭代法(也就是滚动数组)
class Solution {
public:
vector<int> getRow(int rowIndex) {
//思路:采用迭代法,每次赋值都覆盖前一次的赋值,当rowindex小于1时不需要
vector<int>a(rowIndex+1);
if (rowIndex >= 0) {
a[0] = 1;
}
for (int i = 1; i <= rowIndex; i++) {
for (int j = i; j >= 0; j--) {
if (j == i || j == 0) {
a[j] = 1;
} else {
a[j] = a[j] + a[j - 1];
}
}
}
return a;
}
};