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?
Original algorithm (recursive approach) can be referred to [leet code] Pascal's Triangle.
Idea of using only O(k) extra space is reusing the same array list to form the current row of numbers. Iterations will be from 0th row ([1]) to kth row. And for each iteration, we need to form the current base on the previous row.
For example, in 3th row, we have [1,3,3,1]. So in the iteration of 4th row, we need only add 1 at the beginning of this array list, overwritten the 2nd element to 1+3=4, 3rd element to 3+3=6, 4th element to 3+1=4, and keep the last element remain unchanged. Then we would have all the numbers of 4th row, i.e.[1,4,6,4,1].
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> rs = new ArrayList<Integer>();
// special cases
if(rowIndex == 0) {
rs.add(1);
return rs;
}
rs.add(1); // row 0;
for(int i=1; i<=rowIndex; i++){ //rows
rs.add(0,1); // add first element
for (int j=1; j<=i-1; j++){ //columns of ith row
rs.set(j, rs.get(j) + rs.get(j+1));
}
}
return rs;
}
}