Leetcode119. 杨辉三角 II

Leetcode119. 杨辉三角 II

题目描述

 /**
     * 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
     *
     * 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
     */

思路分析

  1. 首先搞明白杨辉三角的构成,及第一层有一个数字,第二层有2个数字,第n层有n个数字
  2. 每一层的第一个和最后一个数字都是1,其他位置的数字为上一层对应两数字之和
  3. 因此可以使用集合模拟杨辉三角的构造,使用双层循环即可实现
  4. 考虑优化
    • 因为题目要求只返回最后一层的元素,因此不宜构造整个大的集合,当前层元素的构成只依赖与上一层
    • 因此只需要保存上一层即可,可减少空间复杂度
  5. 源码见下

源码及分析

 /**
     *
     * @param rowIndex 杨辉三角行数
     * @return 最后一行元素
     */
    public List<Integer> getRow(int rowIndex) {
        //使用集合保存整个杨辉三角
        List<List<Integer>> res = new ArrayList<>();
        //外层循环控制杨辉三角的生成
        for (int i = 0; i <= rowIndex; i++) {
            //定义集合保存每一层的数字
            ArrayList<Integer> level = new ArrayList<>();
            //内层循环用于向每一层添加数字
            for (int j = 0; j <= i; j++) {
                //每一层的第一个和最后一个总为1
                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.get(rowIndex);
    }
posted @ 2021-09-22 17:05  mx_info  阅读(26)  评论(0编辑  收藏  举报