题目
方法一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?
方法二该题目与上一道的不同的是,只需要计算当前的,题目要求的空间是O(k),可以通过定义数组
从后往前更新数组。
public List<Integer> getRow(int rowIndex) { if (rowIndex < 0) { return null; } List<Integer> list = new ArrayList<Integer>(); if (rowIndex == 0) { list.add(1); return list; } if (rowIndex == 1) { list.add(1); list.add(1); return list; } int size = rowIndex + 1; int[] pas = new int[size]; pas[0] = 1; pas[1] = 1; for (int i = 2; i < rowIndex + 1; i ++) { pas[i] = 1; for (int j = i - 1; j > 0; j--) { pas[j] = pas[j] + pas[j - 1]; } pas[0] = 1; } for (int i = 0; i < size; i++) { list.add(pas[i]); } return list; }
题目要求的空间是O(k),实际上可以使用O(1)的空间,利用list本身,来保存上一步计算的结果
public List<Integer> getRow(int rowIndex) { if (rowIndex < 0) { return null; } List<Integer> list = new ArrayList<Integer>(); list.add(1); for (int i = 1; i <= rowIndex; i++) { int temp1 = 1; for (int j = 1; j < i; j++) { int temp2 = list.get(j); list.set(j, temp2 + temp1); temp1 = temp2; } list.add(1); } return list; }