给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行
解题思路
利用动态数组,由杨辉三角我们知道,rowIndex < 2
时结果分别是一个1
和两个1
rowIndex
从2
开始才需要计算,这里的解法举个例子rowIndex = 4
来说明
(行数指的是在杨辉三角中第几行,从0开始)
最开始数组为行数为0
,数组为空,行数不到2
,直接在数组最后拼接1
接着数组行数为1
,数组为1
,行数不到2
,直接在数组最后拼接1
此后的数组行数大于等于2
,每轮需要将最后一个元素往前到第二个元素做处理
假设元素索引为j
,则nums[j] = nums[j - 1] + nums[j]
然后数组行数为2
,数组为1, 1
,最后一个元素 = 1 + 1 = 2
,数组变为1, 2
,在最后拼接1
,变为1, 2, 1
,则为rowIndex = 2
时的结果
行数再加一,数组最后一个元素 = 2 + 1 = 3
,数组变为1, 2, 3
,倒数第二个(同时也是正数第二个)元素 = 1 + 2 = 3
,数组变为1, 3, 3
,最后拼接1
变为1, 3, 3, 1
为rowIndex = 3
时的结果
行数再加一,数组[1, 3, 3, 1] -> [1, 3, 3, 4] -> [1, 3, 6, 4] -> [1, 4, 6, 4] -> [1, 4, 6, 4, 1]
代码
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i <= rowIndex; i++) {
// 前两行都只有元素1, 跳过
for (int j = i - 1; j > 0; j--) {
result.set(j, result.get(j - 1) + result.get(j));
}
result.add(1);
}
return result;
}
}