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?
解法一:按上一题的思路,可以通过Leetcode,但是实际上空间不达标O(n^2)
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> preList = new ArrayList<Integer>();
if(rowIndex < 0) return preList;
preList.add(1);
for(int i=1; i<=rowIndex; i++){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
for(int j=1; j<i; j++){
int t = preList.get(j-1) + preList.get(j);
list.add(t);
}
list.add(1);
preList = list;
}
return preList;
}
}
解法二:达到空间度O(N),利用一个数组,每次都在数组中从后往前滚动赋值
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> preList = new ArrayList<Integer>();
if(rowIndex < 0) return preList;
int a[] = new int[rowIndex+1];
a[0] = 1;
for(int i=1; i<=rowIndex; i++){
a[i] = 1;
for(int j=i-1; j>0; j--){
a[j] = a[j] + a[j-1];
}
}
for(int i=0; i<rowIndex+1; i++) preList.add(a[i]);
return preList;
}
}