给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3 输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?
方法一:将整个杨辉三角存入list中,然后输出最后一行。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> row1=new ArrayList<>();
int a[][]=new int[rowIndex+1][rowIndex+1];
for(int i =0;i<=rowIndex;i++){
List<Integer> row2=new ArrayList<>();
for(int j=0;j<=i;j++){
if(i==j||j==0){
a[i][j]=1;
}else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
row2.add(a[i][j]);
}
row1.add(row2);
}
return row1.get(row1.size()-1);
}
}
方法二:根据二项式系数公式
class Solution {
public List<Integer> getRow(int rowIndex){
rowIndex++;
List<Long> result=new ArrayList<>();
List<Integer> end=new ArrayList<>();
for(int i=0;i<rowIndex;i++){
//long类型防止int溢出
long res=1;
for(long j=1;j<=i;j++){
res=(res*(rowIndex-1-i+j)/j);
}
result.add(res);
}
//最后将long类型转换成整型
for(long digit:result){
end.add((int)digit);
}
return end;
}
}