Pascal's Triangle II

Given an index k, return the kth row of the Pascal's triangle.

For example, given k = 3,
Return [1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?

这次只输出一行,而且k是从0开始的。

由于题目要求o(k)空间,所以只能使用一个list。因为计算当前行的数据,要用到前一行的数据,所以只能在一个list中操作。

见注释,该list存的是上一行的数据,这时要从这些数据中计算出当前行的数据在存进list,当前行list首先比上一行长度大一个,最后一个添加1就行,然后中间的数据j等于前一行j-1和j的和。若从前往后计算并存入中间数据,会有覆盖并影响后面的值。所以从后往前存,当前行的j要前一行的j-1和j,当前行j-1要前一行的j-2和j-1,所以先存j,再算j-1.。。并不会影响其他值得计算。

记住:list不只有add方法,还有set(index,element),add(index,element)方法

class Solution {
    public List<Integer> getRow(int rowIndex) {
        
        List<Integer> row=new ArrayList<>();
        if(rowIndex<0) return row;
        for(int i=0;i<=rowIndex;i++){
            row.add(1);//第一次在头上加1,以后都是在最后添加1,每次操作都是在操作中间元素。
            for(int j=i-1;j>0;j--)
                row.set(j,row.get(j-1)+row.get(j));//set是会覆盖原来位置的元素。所以从后往前设置。
            
        }
        return row;
    }
}
原文地址:https://www.cnblogs.com/xiaolovewei/p/8081237.html