给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
方法一:
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> pre = new ArrayList<Integer>();
List<Integer> cur = new ArrayList<Integer>();
for(int i = 0; i <= rowIndex; i++){
cur = new ArrayList<>();
for(int j = 0; j <= i; j++){
if(j == 0 || j == i)//第一个和最后一个
cur.add(1);
else
cur.add(pre.get(j - 1) + pre.get(j));
}
pre = cur;
}
return cur;
}
}
方法二:杨辉三角其实可以看做由组合数构成
根据组合数的公式,将(n-k)!约掉,化简就是下边的结果。
然后我们就可以利用组合数解决这道题。
class Solution {
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;
}
}