给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。进阶:你可以优化你的算法到 O(k) 空间复杂度吗?
示例:
输入: 3
输出: [1,3,3,1]
这个题力扣给的难度是简单。
当然如果不用优化到O(k)的话,这个题可以直接套用118题的板子再来一遍就可以了,但是因为空间复杂度受到限制,就需要想一种更好一点的算法。
算法思路:看到这个题的时候我是懵的,因为我不知道如何才能把它优化到O(k),然后经过评论区一番遨游之后发现出现了一种新的思路(当然有大神去打表…不过我觉得没有必要,因为刷题是为了学习新的算法思路,而不是为了刷题而刷题)。就是通过定义一个rowIndex大小的数组来存放数据,然后再从上往下的去更改数组中的数据,通过迭代来更新下一行。
源代码:
class Solution {
public List<Integer> getRow(int rowIndex) {
Integer[] num = new Integer[rowIndex+1];
for (int i = 0; i <= rowIndex; i++) {
for (int j = i; j >= 0; j--) {
if (j == 0 || j == i)
num[j] = 1;
else
//这个地方实现了迭代,每一次更新num[j]的时候都会由上一行的数据来更新
num[j] = num[j] + num[j - 1];
}
}
List<Integer> list = Arrays.asList(num);
return list;
}
}
执行用时:
1 ms ,在所有 Java 提交中击败了81.56%的用户
内存消耗:
36 MB, 在所有 Java 提交中击败了85.12%的用户