##公式法
如果熟悉杨辉三角,应该记得杨辉三角其实可以看做由组合数构成。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传])
根据组合数的公式,将(n-k)!约掉,化简就是下边的结果。
然后我们就可以利用组合数解决这道题。
public List<Integer> getRow(int rowIndex) {
List<Integer> ans = new ArrayList<>();
int N = rowIndex;
for (int k = 0; k <= N; k++) {
ans.add(Combination(N, k));
}
return ans;
}
private int Combination(int N, int k) {
long res = 1;
for (int i = 1; i <= k; i++)
res = res * (N - k + i) / i;
return (int) res;
}
上边的算法对于每个组合数我们都重新求了一遍,但事实上前后的组合数其实是有联系的。
总结
这道题其实还是比较简单的,只是优化的两种方法是比较常用的,一种就是用pre变量将要被覆盖的变量存起来,另一种就是倒着进行。另外求组合数的时候,要防止int的溢出。
作者:windliang
链接:https://leetcode-cn.com/problems/pascals-triangle-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by–28/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。