0. 题目
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
![]()
1.c++ 版本
vector<int> pascal(vector<int>& nums) {
vector<int> rows;
int len = nums.size();
rows.push_back(1);
for (int i=1; i<len; ++i) {
rows.push_back(nums[i-1] + nums[i]);
}
if (!nums.empty())
rows.push_back(1);
return rows;
}
vector<vector<int>> generate(int numRows) {
vector<vector<int> > results;
vector<int> rows;
for (int i=0; i<numRows; ++i) {
rows = pascal(rows);
results.push_back(rows);
}
return results;
}
升级版本,注意 Pascal's Triangle, 其实是左右是对称的. 在子函数
pascal
不用全部都遍历计算,只用处理len/2,其他用对称就可以
vector<int> pascal(vector<int>& nums, int line) {
vector<int>rows(line+1);
int len = nums.size();
rows[0]=1;
for (int i=1; i<=len/2; ++i) {
rows[i] = nums[i-1] + nums[i];
rows[len-i] = rows[i];
}
if (!nums.empty())
rows[line] = 1;
return rows;
}
vector<vector<int>> generate(int numRows) {
vector<vector<int>> results;
vector<int> rows;
for (int i=0; i<numRows; ++i) {
rows = pascal(rows, i);
results.push_back(rows);
}
return results;
}
版本3:参考https://leetcode.com/problems/pascals-triangle/discuss/38171/Maybe-shortest-c%2B%2B-solution
其思想就是直接使用二维数组。注意二维数组初始化,以及resize用法(http://www.cplusplus.com/reference/vector/vector/resize/)
![]()
vector<vector<int>> generate(int numRows) {
vector<vector<int>> results(numRows);
for (int i=0; i< numRows; i++) {
int len = i+1;
results[i].resize(len);
results[i][0] = results[i][i] = 1;
for (int j=1; i>1 && j<=len/2; ++j) {
results[i][j] = results[i-1][j-1] + results[i-1][j];
results[i][len-1-j] = results[i][j];
}
}
return results;
}
2. python 版本
class Solution(object):
def pascal(self, nums):
"""
统计每个
"""
rows = []
rows.append(1)
length = len(nums)
for i in range(1, length):
rows.append(nums[i-1] + nums[i])
if nums:
rows.append(1)
return rows
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
results = []
rows = []
for i in range(0, numRows):
rows = self.pascal(rows)
results.append(rows)
return results
网友评论