LeetCode_数据结构入门_杨辉三角

杨辉三角

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

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

LeetCode_数据结构入门_杨辉三角

示例 1:

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

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

(上述题目来源于LeetCode)

解法:
class Solution {
    public List<List<Integer>> generate(int numRows) {
        //定义一个存储整数对象的列表的列表
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        //i是行数
        for(int i = 0;i < numRows;i++){
            //每一行都是一个存储整数对象的列表,j是每一行的元素
            List<Integer> res = new ArrayList<Integer>();
            //每一行的元素个数等于这一行的行数
            for(int j = 0;j <= i;j++){
                //如果是每一行的第一个或者最后一个数,等于1,将1添加进去
                if(j == 0 || j == i){
                    res.add(1);
                }else{ //这个数等于上一行的j-1和j两个数的和
                    res.add(result.get(i-1).get(j-1) + result.get(i-1).get(j));
                }
            }
            //将这一行数添加进列表
            result.add(res);
        }
        return result;
    }
}

在这一道题目中,运用到 list列表,在这里记录一下列表的使用。
此处可以参考博客:Java基础教程——List(列表)
实现List接口的子类有两种:ArrayList类 和 LinkedList类。
ArrayList类的底层是由数组实现,其用法类似于数组,其容量可按需要动态调整,所以也称其为动态数组。ArrayList不是同步的,在多线程环境下不安全,但是可以用Collections.synchronizedList(…)将其转为线程安全的列表。另外,ArrayList每一次扩容至原本容量的1.5倍,查询快,增删慢。LinkedList类的底层是由链表实现的,查询慢,增删快,适合用于需要大量插入、删除数据的场合,适合采用迭代器Iterator遍历。

在本题中,List<Integer>指的是一个储存整数对象的列表,在本题中它存储了杨辉三角中的一行。List<List<Integer>>则表示一个储存整数对象的列表的列表,在本题中它储存了整个杨辉三角。

上一篇:权限系统的设计


下一篇:k8s 基于RBAC的认证、授权介绍和实践