Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
http://oj.leetcode.com/problems/pascals-triangle/
Solution:
We find that ith row has i numbers. And except the start and end number, t[i][j] = t[i-1][j-1] + t[i-1][j]. So it is a simple one dimension dp problem.
https://github.com/starcroce/leetcode/blob/master/pascal_triangle.cpp
// 4 ms for 15 test cases
class Solution {
public:
vector<vector<int> > generate(int numRows) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<vector<int> > ans;
if(numRows == 0) {
return ans;
}
// 1st level
ans.push_back(vector<int> (1, 1));
for(int i = 2; i <= numRows; i++) {
vector<int> level (i, 1);
// last level
vector<int> &last = ans[i-2];
for(int j = 1; j < i-1; j++) {
level[j] = last[j-1] + last[j];
}
ans.push_back(level);
}
return ans;
}
};
本文介绍了一种高效的算法来生成帕斯卡三角形。该算法利用动态规划原理,通过简单的数学运算来构建每一层的数值。文章还提供了一个C++实现示例,能够快速生成指定层数的帕斯卡三角形。
392

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



