杨辉三角
题目描述:
思路:
首先梳理一下杨辉三角的特点:
1.我们要用一个二维数组去存储杨辉三角,如:{{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,4,1}}
2.杨辉三角的第一个元素,最后一个元素都是1
3.杨辉三角的第n行有n个元素
4.除去第一行,杨辉三角的元素等于它正上方的元素与正上方前面一个元素的和。
根据上面的特点,我们应该先逐个生成二维数组内的元素,再将元素添加到最外层的二维数组中。
我们先创建一个方法,利用上次生成的数组(元素)去生成本次的数组(元素),那么这个方法就需要两个参数,一个是上次的数组(元素),一个是本次是第几行的数组(元素),最后还需要返回这个结果:public static ArrayList<Integer> getRows(List<Integer> list,int n);
然后需要创建一个方法,将生成的数组(元素)添加到外层数组中,并返回结果:public static List<List<Integer>> generate(int numRows);
class Solution { public List<List<Integer>> generate(int numRows) {
List<List<Integer>> listOut = new ArrayList<>(); List<Integer> listIn = new ArrayList<>(); //创建一个临时列表存储上次的结果集合 List<Integer> temp = listIn; for(int i = 1;i<=numRows;i++){ temp = getRows(temp,i); listOut.add(temp); } return listOut; } //通过上次的结果集合得到当前行的结果 public static ArrayList<Integer> getRows(List<Integer> list,int n){ //创建一个数组来存储当前结果集合 ArrayList<Integer> integers = new ArrayList<>(); for(int i = 0;i<n;i++){ if(i==0||i==n-1){ integers.add(1); }else{ integers.add(list.get(i-1)+list.get(i)); } } return integers; } }