Leetcode118.杨辉三角

Leetcode118.杨辉三角

题目描述

/**
     * 
     * 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
     * <p>
     * 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
     */

思路分析

  1. 杨辉三角,即每一层的第一个数字和最后一个数字都为1,其他数字为上一层两数字之和
  2. 基于上述规律,使用两层循环生成杨辉三角每一层的数字
  3. 外层循环控制生成每一层数字,内层循环用于生成每一层具体的数字
  4. 使用集合保存每一层的关系,具体生成方法见源码
  5. 源码见下

源码及分析

/**
     *
     * @param numRows 指定行数
     * @return 返回生成的杨辉三角
     */
    public List<List<Integer>> generate(int numRows) {
        //定义保存集合的集合用于存储杨辉三角
        List<List<Integer>> res = new ArrayList<>();
        //外层循环控制总共生成多少层
        for (int i = 0; i < numRows; i++) {
            //使用集合保存每层的数字
            ArrayList<Integer> level = new ArrayList<>();
            //内层循环生成每层的数字
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    level.add(1);
                } else {
                    //当前层当前数字等于上一层两数字之和
                    level.add(res.get(i - 1).get(j - 1) + res.get(i - 1).get(j));
                }
            }
            res.add(level);
        }
        return res;
    }
posted @ 2021-09-22 12:56  mx_info  阅读(40)  评论(0)    收藏  举报