Leetcode 118. 杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
《Leetcode 118. 杨辉三角》
在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

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

解题

1.首先,们知道必须要一个numRows的循环。其次是内层循环。本题的时间复杂度O(n^2)。空间复杂度亦同。
2.方法要求返回List数组对象。所以我们返回的是List的子类对象。考虑到Integer类已经实现了Compareble接口,那么加入到List中的对象会被排序。但是这个事情不会发生,因为要调用Colloection.sort(list)才会排序。所以能够保证我们的添加顺序。
3.起始&结束位子的判断。我们是根据前一行来生成后一行的数据,所以在第一行的时候,我们先初始化一个[1]数组。而结束的时候,最后一个数据,是上一个数组的最后一个数字加0.
4.每行的首个数组成员是1.

代码

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        for (int i = 0; i < numRows; i++){
            if(i == 0) {// init first row
                List<Integer> subList = new ArrayList<Integer>();
                subList.add(1);// prefix number 1
                result.add(subList);
                continue;
            }
            /*if(i == 1){// init second row
                List<Integer> subList = new ArrayList<Integer>();
                subList.add(1);// prefix number 1
                subList.add(1);// pubfix number 1
                result.add(subList);
                continue;
            }*/
            List<Integer> subList = result.get(i-1);
            List<Integer> newList = new ArrayList<Integer>();
            newList.add(1);
            for(int j = 0; j < subList.size(); j++){
                int next = (j+1)>=subList.size() ?0 : subList.get(j+1);
                newList.add(subList.get(j)+ next);
            }
            //newList.add(1);// subfix number 1
            result.add(newList);
        }
        return result;
    }
}
点赞