给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3 输出: [1,3,3,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
对之前做的输出n行杨辉三角的代码做一些修改
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> list = new ArrayList();
list.add(new ArrayList());
list.get(0).add(1);
if(rowIndex==0){
return list.get(0);
}
for(int i=1;i<=rowIndex;i++){
List<Integer> preList = list.get(i-1);
List<Integer> temList = new ArrayList();
temList.add(1);
for(int j=1;j<preList.size();j++){
temList.add(preList.get(j-1)+preList.get(j));
}
temList.add(1);
list.add(temList);
}
return list.get(rowIndex);
}
}
查看评论区,发现有个非常有想法的思路,就是在计算第k行的时候,可以在k-1行的首位插入一个0,然后k-1行相邻两个数相加就可以得到第k行,比如[0,1]int[i]=int[i]+int[i+1],就可以得到[1,1]保留最后一位1,具体代码如下:
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> list = new ArrayList();
list.add(1);
for(int i=0;i<rowIndex;i++){
list.add(0,0);//在第一位插入0
for(int j=0;j<i+1;j++){
list.set(j,list.get(j)+list.get(j+1));
}
}
return list;
}
}