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; } }