题目描述
在118题之上,你可以优化你的算法到 O(rowNum) 空间复杂度吗?
题解
总的来说就是利用杨辉三角形后一行与前一行的关系。
更新过程为:从倒数第二个元素开始往前更新 它等于原来这个位置的数 + 前一个位置的数
行[i] = 行[i] + 行[i-1]
为什么不从前往后更新? 因为后面的数依赖于前面的数,如从前往后更改后面的值会不断增大
图片转载自meteora
class Solution {
public List<Integer> getRow(int rowIndex) {
//第k行含有k+1个数
List<Integer> res = new ArrayList<>(rowIndex+1);
//在循环开始前给res 添加初始值,否则后续不方便用set更新值
res.add(1);
//从第二行开始更新(rowIndex:1)
for(int i=1;i<=rowIndex;i++){
//从后往前更新倒数第二个(colIndex:i-1)到第二个(ColIndex:1)数
for(int j=i-1;j>0;j--){
res.set(j,res.get(j-1)+res.get(j));
}
//添加每一行的最后一个数1
res.add(1);
}
return res;
}
}