问题描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
解题思路
初始化两个数组,nums用来保存当前计算到杨辉三角的某一行的值,而yuan则保存当前计算到杨辉三角的上一行的值。这样,每次nums[i]=yuan[i-1]+yuan[i].
代码实现
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> lists=new ArrayList<>();
if(rowIndex==0){
lists.add(1);
return lists;
}
int nums[]=new int[rowIndex+1]; //保存当前行的元素值
int yuan[]=new int[rowIndex+1]; //保存上一行的元素值
//初始化第一行
nums[0]=1;
yuan[0]=1;
nums[1]=1;
yuan[1]=1;
for(int i=2;i<=rowIndex;i++){
for(int j=1;j<=i;j++){
nums[j]=yuan[j-1]+yuan[j]; //矩阵中左上方和正上方的元素和
System.out.println(nums[j]);
}
//yuan数组的值在下一次循环中等于当前nums数组的值,这里进行更新
for(int j=1;j<=i;j++){
yuan[j]=nums[j];
}
}
for(int i=0;i<=rowIndex;i++){
lists.add(nums[i]);
}
return lists;
}
}