快捷搜索: 王者荣耀 脱发

帕斯卡三角形(杨辉三角)

帕斯卡三角形(杨辉三角)

颠倒给定的 32 位无符号整数的二进制位。

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

我的思路

思路一

使用一个递归函数,根据上一层的List,生成当前层的List,并且最终存放在一个公共变量中。

这里生成List的总集合的时候,是有讲究的,先做递归,再使用add方法,这样的List总集合就会从低数往上排。

class Solution {
    public static List<List<Integer>> list = new ArrayList<>();
    public static  List<List<Integer>> generate(int numRows) {
        list = new ArrayList<>();
        subGenerate(numRows);
        return list;
    }
    public static List<Integer> subGenerate(int numRows){
        if(numRows<=0){
            return null;
        }
        if(numRows==1){
            ArrayList<Integer> resultList = new ArrayList<>(Arrays.asList(1));
            list.add(resultList);
            return resultList;
        }
        if(numRows==2){
            subGenerate(1);
            ArrayList<Integer> resultList = new ArrayList<>(Arrays.asList(1,1));
            list.add(resultList);
            return resultList;
        }
        List<Integer> preList = subGenerate(numRows - 1);
        List<Integer> resultList = new ArrayList<>();
        resultList.add(1);
        int preSize = preList.size();
        int pre = 0;
        int next = preList.get(0);
        for(int i = 1 ;i < preSize; i ++){
            pre = next;
            next = preList.get(i);
            resultList.add(pre+next);
        }
        resultList.add(1);
        list.add(resultList);
        return resultList;
    }
}
经验分享 程序员 微信小程序 职场和发展