题目:
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?
已知帕斯卡三角性质 第i行第j个元素a(i,j)=a(i-1,j-1)+a(i-1,j) (j>0且j<i),a(i,j) = 1 (j==0,或者j==i);
把帕斯卡三角每行值打印出来,左对齐可以看的更明白:
1
1 1
1 2 1
1 3 3 1
....因此,第i行的运算可以利用到第i-1行的结果,O(k)的额外空间足够。
注意一点,计算第i行时应该从后往前计算。
代码:
<pre name="code" class="java">import java.util.*;
public class Solution {
public List<Integer> getRow(int rowIndex) {
// extra space only needed
List<Integer> ret = new ArrayList<Integer>(rowIndex + 1);
for (int i = 0; i < rowIndex + 1; i++) {
ret.add(1);
if (i > 1) {
for (int j = i - 1; j >= 1; j--) {
ret.set(j, ret.get(j - 1) + ret.get(j));
}
}
}
return ret;
}
}