数据结构-杨辉三角

111 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

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

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

image.png

示例 1:

输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2:

输入: numRows = 1 输出: [[1]]

提示:

1 <= numRows <= 30

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

img

杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1. 第n行的数字个数为n个. 第n行的第k个数字为组合数. 第n行数字和为2n − 1. 除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和

由此性质写出整个杨辉三角形.

利用上一行的数据计算当前行的数据,前后填充 1,并保存上一行的数据

三、AC代码

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList<>();
​
        for(int i = 0; i < numRows; i++){
            List<Integer> list = new ArrayList<>();
​
            for(int j = 0; j <= i; j++){
                if (j == 0 || j == i){
                    list.add(1);
                } else {
                    List<Integer> prev = res.get(i - 1);
                    int num = prev.get(j) + prev.get(j - 1);
                    list.add(num);
                }
            }
            res.add(list);
        }
        return res;
    }
}
​

四、总结:

image.png 掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐