杨辉三角
题目地址:https://leetcode.cn/problems/pascals-triangle/
动态规划解法
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> arr;
vector<int> t;t.push_back(1);
arr.push_back(t);
// dp[i][j]:第i行j列的元素为dp[i][j]
int dp[numRows][numRows];
// 初始值:dp[0][0] = 1;两侧数据都为1;
// 递推表达式:dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
for(int i=1;i<numRows;i++){
// 存储每一行数据的临时数组
vector<int> tr;
for(int j=0;j<i+1;j++){
if(j == 0 || j == i){
dp[i][j] = 1;
tr.push_back(dp[i][j]);
}else{
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
tr.push_back(dp[i][j]);
}
}
arr.push_back(tr);
}
return arr;
}
};
数学解法
利用概率论的组合数
第i行i列数据为(j=0<i):(i-1)!/((j!)*(i-1-j)!)
用于推理,代码实现还是算了,可能行数太多,设计精度问题
杨辉三角2
动态规划
class Solution {
public:
// 动态规划 -- 每次只保存上一行数据
vector<int> getRow(int rowIndex){
vector<int> t;
t.push_back(1);
if(rowIndex == 0)
return t;
// dp[i][j]:第i行j列元素的数据值为dp[i][j]
int dp[rowIndex+1][rowIndex+1];
// 初始化
dp[0][0] = 1;
for(int i = 1;i<=rowIndex;i++){
vector<int> arr;
for(int j = 0;j<i+1;j++){
if(j == 0 || j == i)
dp[i][j] = 1;
else{
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
}
t.clear();
for(int j = 0;j<rowIndex+1;j++){
t.push_back(dp[rowIndex][j]);
}
return t;
}
};