1.杨辉三角
给定一个非负整数numRows,生成杨辉三角的前numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。
考察知识点:动态规划
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ans(numRows);
for(int i=0;i<numRows;++i)
{
ans[i].resize(i+1);
ans[i][0]=1;
ans[i][i]=1;
for(int j=1;j<i;++j)
ans[i][j]=ans[i-1][j-1]+ans[i-1][j];
}
return ans;
}
};
2.杨辉三角 II
给定一个非负索引k,其中k ≤ 33,返回杨辉三角的第k行。在杨辉三角中,每个数是它左上方和右上方的数的和。
考察知识点:动态规划
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ans,tmp;
for(int i=0;i<=rowIndex;++i)
{
ans.resize(i+1);
ans[0]=1;
ans[i]=1;
for(int j=1;j<i;++j)
ans[j]=tmp[j-1]+tmp[j];
tmp=ans;
}
return ans;
}
};
进阶:

class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ans(rowIndex+1);
ans[0]=1;
for(int i=1;i<=rowIndex;++i)
ans[i]=(long)ans[i-1]*(rowIndex-i+1)/i;
return ans;
}
};
本文介绍如何使用动态规划生成杨辉三角及其特定行。提供了两种方法:一种是逐行构建整个杨辉三角;另一种是仅计算指定行,后者通过优化避免了不必要的内存占用。
8万+

被折叠的 条评论
为什么被折叠?



