【LeetCode】 119. Pascal’s Triangle II 杨辉三角 II(Easy)(JAVA)
题目地址: https://leetcode.com/problems/pascals-triangle-ii/
题目描述:
Given an integer rowIndex, return the rowIndexth row of the Pascal’s triangle.
Notice that the row index starts from 0.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
Follow up:
Could you optimize your algorithm to use only O(k) extra space?
Example 1:
Input: rowIndex = 3
Output: [1,3,3,1]
Example 2:
Input: rowIndex = 0
Output: [1]
Example 3:
Input: rowIndex = 1
Output: [1,1]
Constraints:
- 0 <= rowIndex <= 40
题目大意
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
进阶:
- 你可以优化你的算法到 O(k) 空间复杂度吗?
解题方法
- 和上一次类似,只需要一层一层往下遍历即可
- 为了不是用新的一个 List,
- 通过观察可以知道,每次都是新增一个元素,所以每次把 1 新增在最后即可
- 而且从后往前遍历的话,后一个元素都是只用一次就可以,就可以直接替换掉
- 从前往后遍历的话,当前元素下一个元素也需要加,被覆盖了就无法使用,或者需要把当前元素记录下来,下次使用的时候替换
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i <= rowIndex; i++) {
for (int j = i; j >= 0; j--) {
if (j == i) {
list.add(1);
} else if (j > 0) {
list.set(j, list.get(j) + list.get(j - 1));
}
}
}
return list;
}
}
执行耗时:1 ms,击败了80.44% 的Java用户
内存消耗:36.3 MB,击败了56.44% 的Java用户
![](https://img-blog.csdnimg.cn/20201107174624800.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2OTI3ODUz,size_16,color_FFFFFF,t_70#pic_center)