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].
1 public class Solution { 2 public List<Integer> getRow(int rowIndex) { 3 ArrayList<Integer> res = new ArrayList<Integer>(); 4 if (rowIndex < 0) return res; 5 for (int i=0; i<=rowIndex; i++) { 6 for (int j=i; j>=0; j--) { 7 if (j == i) res.add(1); 8 else if (j > 0) { 9 res.set(j, res.get(j-1)+res.get(j)); 10 } 11 } 12 } 13 return res; 14 } 15 }
1 public class Solution { 2 public ArrayList<Integer> getRow(int rowIndex) { 3 ArrayList<Integer> list = new ArrayList<Integer>(); 4 list.add(1); 5 int prev, current; 6 for (int i = 0; i <= rowIndex; i++) { 7 prev = 1; 8 for (int j = 0; j <= i; j++) { 9 if (j == 0) continue; 10 if (j == i) list.add(1); 11 else { 12 current = list.get(j); 13 list.set(j, current + prev); 14 prev = current; 15 } 16 } 17 } 18 return list; 19 } 20 }
1 public ArrayList<Integer> getRow(int rowIndex) { 2 ArrayList<Integer> res = new ArrayList<Integer>(); 3 if(rowIndex<0) 4 return res; 5 res.add(1); 6 for(int i=1;i<=rowIndex;i++) 7 { 8 for(int j=res.size()-2;j>=0;j--) 9 { 10 res.set(j+1,res.get(j)+res.get(j+1)); 11 } 12 res.add(1); 13 } 14 return res; 15 }