题目链接:https://leetcode-cn.com/problems/pascals-triangle-ii/
题目描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?
代码
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ret;
if(rowIndex < 0) return ret;
ret.push_back(1);
if(rowIndex == 0) return ret;
ret.push_back(1);
if(rowIndex == 1) return ret;
for (int i = 2; i <= rowIndex; ++i) {
vector<int> tmp = {1};
for (int j = 1; j < ret.size(); ++j)
tmp.push_back(ret[j]+ret[j-1]);
tmp.push_back(1);
ret = tmp;
}
return ret;
}
};
关键是从后往前,类似错位相加
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res(rowIndex+1,0);
res[0]=1;
for(int i=1;i<rowIndex+1;i++)
{
for(int j=i;j>=1;j--)
res[j]+=res[j-1]; // 从后往前
}
return res;
}
};