119. 杨辉三角 II

75 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

一、题目描述:

119. 杨辉三角 II - 力扣(LeetCode) (leetcode-cn.com)   给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex **行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

1626927345-DZmfxB-PascalTriangleAnimated2.gif

示例 1:

输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:

输入: rowIndex = 0
输出: [1]

示例 3:

输入: rowIndex = 1
输出: [1,1]

提示:

  • 0 <= rowIndex <= 33

二、思路分析:

原来想着用两个ArrayList,一个保存上一行的数据,另一个保存当前行的数据。 但是后来发现可以只用一个List。只要一个变量保存一下同一行中上一个位置的数据即可。

三、AC 代码:

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> ans = new ArrayList<Integer>();
        ans.add(1);
        for(int i = 1; i <= rowIndex; i++) {
            int prev = 1;
            for(int j = 1; j <= i; j++) {
                if(j == i) {
                    ans.add(1);
                } else {
                    int tmp = ans.get(j);
                    ans.set(j,ans.get(j) + prev);
                    prev = tmp;
                }
            }
        }
        return ans;
    }
}

四、总结:

其实我们可以优化一下,我们可以把 pre 的 List 省去。

这样的话,cur每次不去新建 List,而是把cur当作pre。

又因为更新当前j的时候,就把之前j的信息覆盖掉了。而更新 j + 1 的时候又需要之前j的信息,所以在更新前,我们需要一个变量把之前j的信息保存起来。

范文参考:

【杨辉三角 II】【C语言详解】【动态规划入门8\50】 - 杨辉三角 II - 力扣(LeetCode) (leetcode-cn.com)

【LetMeFly】119.杨辉三角 II:基于原地滚动的空间优化 - 杨辉三角 II - 力扣(LeetCode)

执行用时 : 0 ms , 在所有 golang 提交中击败了 100.00% 的用户 内存消耗 : 2 MB , 在所有 golang 提交中击败了 100.00% 的用户 - 杨辉三角 II - 力扣(LeetCode)