目录
题目
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0
输出: [1]
示例 3:
输入: rowIndex = 1
输出: [1,1]
提示:
0 <= rowIndex <= 33
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
- 特例,前面两行,i=0行,结果是[1],i=1,结果是[1,1];
- 从第三行开始,即i=2开始,每行的开头和结尾值都是1,中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值。
C++代码
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了7.38%的用户
通过测试用例:34 / 34
class Solution {
public:
vector<int> getRow(int rowIndex) {
// 注意,rowIndex是从0开始索引
// 特例
if (rowIndex == 0) return {1};
if (rowIndex == 1) return {1, 1};
// 从第三行开始,即i=2开始,每行的开头和结尾值都是1
// 中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值
vector<vector<int>> total_ans = {{1}, {1,1}};
for (int i=2; i <= rowIndex; i++)
{
vector<int> child_ans = {1}; // 每行开头值都是1
for (int j=1; j < i; j++) // 中间值即j=1列到j=i-1列值
{
child_ans.push_back(total_ans[i-1][j-1] + total_ans[i-1][j]);
}
child_ans.push_back(1); // 每行结尾值都是1
total_ans.push_back(child_ans); // 记录当前行结果
}
return total_ans[rowIndex];
}
};
python代码
执行用时:16 ms, 在所有 Python 提交中击败了64.59%的用户
内存消耗:13.3 MB, 在所有 Python 提交中击败了5.30%的用户
通过测试用例:34 / 34
class Solution(object):
def getRow(self, rowIndex):
"""
:type rowIndex: int
:rtype: List[int]
"""
# 注意rowIndx是从0行开始。
# 特例,前面两行
if rowIndex == 0: return [1]
if rowIndex == 1: return [1, 1]
# 从第三行开始,即i=2开始,每行的开头和结尾值都是1
# 中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值
total_ans = [[1], [1,1]] # 记录上面行结果
for i in range(2, rowIndex+1):
child_ans = [1] # 每行开头值是1
for j in range(1, i): # 每行中间值都是左上角值加上右上角值
child_ans.append(total_ans[i-1][j-1] + total_ans[i-1][j])
child_ans.append(1) # 每行结尾值是1
total_ans.append(child_ans) # 记录当前行结果
return total_ans[-1]