Dynamic Programming学习笔记 (27) - 杨辉三角之二 (力扣# 119)

182 阅读1分钟

本题出自力扣题库第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)。