[LeetCode]118. Pascal’s Triangle 解题报告(C++)
题目描述
Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
题目大意
- 给你一行数
numRows
让你生成 帕斯卡三角形. - 注: 索引号从 0 开始.
解题思路
方法1:
- 根据杨辉三角的性质.
- 观测可得:
- res (i,j) = res (i-1, j-1) + res (i-1,j)
- 特别注意 j==0 和 j== res[i].size-1 时,值都为 1
代码实现:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
res.resize(numRows);
for (int i = 0; i < numRows; i++) {
res[i].resize(i + 1);
}
if (numRows <1) {
return{};
}
res[0][0] = 1;
for (int i = 1; i < numRows; i++) {
for (int j = 0; j < res[i].size(); j++) {
if (j == 0 || j == res[i].size() - 1) {
res[i][j] = 1;
}
else {
if (j - 1 >= 0) {
res[i][j] = res[i - 1][j] + res[i - 1][j - 1];
}
}
}
}
return res;
}
};
[LeetCode] 解题报告(C++)
题目描述
Given a non-negative index k where k ≤ 33, return the *k*th index row of the Pascal’s triangle.
Note that the row index starts from 0.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 3
Output: [1,3,3,1]
Follow up:
Could you optimize your algorithm to use only O(k) extra space?
题目大意
- 给定一个非零的索引 k. 返回k-th index 行的杨辉三角.
- 只用 O(k)的额外空间
解题思路
方法1:
- 通过杨辉三角的性质. a(i,j) = a(i-1,j-1) + a(i-1,j);
- 逐行构造.. 循环得到i-th row的.
代码实现:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> out;
if (rowIndex < 0) return out;
// 索引i对应有i+1个元素.
out.assign(rowIndex + 1, 0); // 初值为0.
for (int i = 0; i <= rowIndex; ++i) {
if (i == 0) {
out[0] = 1;
continue;
}
for (int j = rowIndex; j >= 1; --j) {
out[j] = out[j] + out[j - 1];
}
}
return out;
}
};