leetcode118-杨辉三角

原题

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

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

示例:

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

解法

思想

根据上一行生成下一行,避免重复计算

代码

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<Integer> row = new ArrayList();
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        for(int n = 0;n<numRows;n++){
            row = getRow(n+1,row);
            ret.add(row);
        }
        return ret;
    }

    //n:第n行,nums:上一行(n-1行)的列表
    public List<Integer> getRow(int n,List<Integer> nums){
        List<Integer> ret = new ArrayList();
        ret.add(1);//第一个1不需要计算
        if(n==1){//第一行直接返回
            return ret;
        }
        for(int i=1;i<(n+1)/2;i++){//由上一行的数相加得到结果
            ret.add(nums.get(i-1)+nums.get(i));
        }
        int size = n/2;
        for(int i=0;i<size;i++){//镜像处理
            ret.add(ret.get(size-i-1));
        }
        return ret;
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode118-%e6%9d%a8%e8%be%89%e4%b8%89%e8%a7%92/

发表回复

登录后才能评论