开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
一、题目描述:
119. 杨辉三角 II - 力扣(LeetCode) (leetcode-cn.com)
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex **行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 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)