本题出自力扣题库第119题。题面大意如下:
给定一个非负索引 rowIndex,返回杨辉三角的第rowIndex 行。
我们使用一个O(n)的DP数组来存储第n行的各个数字,依据在#118中已经讨论过的杨辉三角数字规律,第n行的第k个数字等于第n-1行的第k-1个数字和第k个数字的和,使用双重循环()来计算DP数组中各个元素的数值,外层循环是行号从小到大,内层是该行的各个数字下标从大到小,Java代码如下:
class Solution {
public List<Integer> getRow(int rowIndex) {
Integer[] nums = new Integer[rowIndex + 1];
nums[0] = 1;
for (int i = 1; i <= rowIndex; i ++) {
for (int j = i - 1; j >= 1; j --) {
nums[j] += nums[j - 1];
}
nums[i] = 1;
}
return Arrays.asList(nums);
}
}
从数学角度出发,我们可以直接使用二项式系数公式来计算杨辉三角中第n行中的各个数字,所需的计算复杂度由此可以优化为O(n)。