一,题目描述
难度简单623
给定一个非负整数
numRows
,生成「杨辉三角」的前numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:
输入: numRows = 1 输出: [[1]]
二,解决思想:
除了头元素和尾元素和上一个集合相同之外,其他的每个元素都是上一个集合中的元素与其前一个元素之和。
三,代码:
package zyh.springcloud.chapter2.service.impl.algorithm;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName PascalsTriangle
* @Author zhangyonghui
* @Description
* @Date 2021/11/11 9:10
* @Version 1.0
**/
public class PascalsTriangle {
public static void main(String[] args) {
List<List<Integer>> outList = generate(5);
System.out.println("outList.toString() = " + outList.toString());
}
public static List<List<Integer>> generate(int numRows) {
//外边那个List
List<List<Integer>> waiList = new ArrayList<>();
for (int i = 1; i <= numRows; i++) {
if (i == 1) {
List<Integer> neiList = new ArrayList<>();
neiList.add(i);
waiList.add(neiList);
} else {
List<Integer> neiList = new ArrayList<>();
//获取上一个neiList:
List<Integer> preNeiList = waiList.get(i - 2);
for (int j = 0; j < preNeiList.size(); j++) {
Integer integer = preNeiList.get(j);
//加第一个:
if (j == 0) {
neiList.add(integer);
} else { //中间的一系列元素是上一个neiList中的元素与上一个元素之和:
Integer preInteger = preNeiList.get(j - 1);
int sumTemp = integer + preInteger;
neiList.add(sumTemp);
}
}
//加最后一个:
neiList.add(preNeiList.get(preNeiList.size() - 1));
waiList.add(neiList);
}
}
return waiList;
}
}