今日简单题(差点做不出来):https://leetcode-cn.com/problems/pascals-triangle-ii/
先说思路,第一反应还是递归,确定第rowIndex行每个元素的值,然后把公式写出来。
这里题解说得比较明确了:
但是这么算的时间复杂度太高了,所以我直接参考了题解的进阶答案:
可以看到公示中的n是rowIndex,m是在rowIndex行的某个元素下标。
这个方法需要一定的数学推导,在不依赖其他行的情况下,自己把一行元素的计算规律摸出来,还是挺有意思的。
另外要注意的是,i的范围是[1, rowIndex],不要从0开始。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> row = new ArrayList<Integer>();
row.add(1);
for (int i=1;i<=rowIndex;i++) {
row.add((int)((long)row.get(i-1)*(rowIndex-i+1)/i));
}
return row;
}
}