一,题目描述
原文链接:力扣
难度简单332
给定一个非负索引
rowIndex
,返回「杨辉三角」的第rowIndex
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3 输出: [1,3,3,1]示例 2:
输入: rowIndex = 0 输出: [1]示例 3:
输入: rowIndex = 1 输出: [1,1]提示:
0 <= rowIndex <= 33
进阶:
你可以优化你的算法到
O(rowIndex)
空间复杂度吗?
二,解决思想
详见代码
三,代码
package zyh.springcloud.chapter2.service.impl.algorithm;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName PascalsTriangleII
* @Author zhangyonghui
* @Description:杨辉三角 II
* @Date 2021/11/11 9:40
* @Version 1.0
**/
public class PascalsTriangleII {
public static void main(String[] args) {
List<Integer> list = getRow(3);
System.out.println("outList.toString() = " + list.toString());
}
public static List<Integer> getRow(int rowIndex) {
//上一个List:
List<Integer> preList = new ArrayList<>();
for (int i = 0; i <= rowIndex; i++) {
if (i == 0) {
preList.add(1);
} else {
List<Integer> neiList = new ArrayList<>();
for (int j = 0; j < preList.size(); j++) {
Integer integer = preList.get(j);
//加第一个:
if (j == 0) {
neiList.add(integer);
} else { //中间的一系列元素是上一个neiList中的元素与上一个元素之和:
Integer preInteger = preList.get(j - 1);
int sumTemp = integer + preInteger;
neiList.add(sumTemp);
}
}
//加最后一个:
neiList.add(preList.get(preList.size() - 1));
preList = neiList;
neiList = null;
}
}
return preList;
}
}