怒刷力扣(杨辉三角)

简介: 杨辉三角是在数学二项式中会遇到,在简单的算法题中出现的频率也是很高,不过确实是个简单的算法题,快来看看吧。

杨辉三角

WangScaler: 一个用心创作的作者。

声明:才疏学浅,如有错误,恳请指正。

题目

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

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

img

初次分析

这个题上大学那会儿,就做过,在数学上好像也有做过。杨辉三角就是把二项式进行了图形化。如上图所示,每个数的值为

A(j,k)=A(j−1,k−1)+A(j−1,k)

解决这个题必须两层for循环,第一层循环是层数,也就是numRows是几,我们就遍历几次。

第二层循环是把该层的值计算出来放到LIst里面。

也就是说解决这个题的关键就在第二次for循环上。

继续分析

那么我们怎么如何得到每一层的值呢。

  • 每一层的第一个数和最后一个数都是1
  • 每一层的剩下的数都是上一层左右两边的数之和。
  • 每一层的数量等于层数

找到这些规律,那么这个题的答案就不难写出了。

答案

public static List<List<Integer>> generate(int numRows) {
    int count = 1;
    List<List<Integer>> lists = new ArrayList<>();
    while (count <= numRows) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        if (count != 1) {
            for (int i = 0; i < lists.get(count - 2).size() - 1; i++) {
                list.add(lists.get(count - 2).get(i) + lists.get(count - 2).get(i + 1));
            }
            list.add(1);
        }
        lists.add(list);
        count++;
    }
    return lists;
}

复杂度

  • 时间复杂度: O(n2)。其中n为层次的值,因为两次循环,所有为O(n2)
  • 空间复杂度:O(1)。不考虑返回值的空间占用。

总结

我的答案专门写了个if条件判断是否是第一层,我感觉这个地方有优化空间,改天有时间了再来调整下代码。如果你看到了,欢迎指正哦。我这里没把第一层的数写到while循环外边,是为了防止传个小于等于0的数进来,那样直接返回第一层的答案,显然是不和逻辑的。

但是题目有强调1 <= numRows <= 30,所以可以放到外边。

都来了,点个赞再走呗!

关注WangScaler,祝你升职、加薪、不提桶!

目录
相关文章
|
7月前
|
索引
leetcode-119:杨辉三角 II
leetcode-119:杨辉三角 II
64 0
|
7月前
leetcode代码记录(杨辉三角
leetcode代码记录(杨辉三角
43 1
|
6月前
|
缓存 算法 数据可视化
LeetCode 题目 119:杨辉三角 II
LeetCode 题目 119:杨辉三角 II
|
6月前
|
存储 SQL 算法
LeetCode 题目 118:杨辉三角
LeetCode 题目 118:杨辉三角
【每日一题】4.LeetCode——杨辉三角
【每日一题】4.LeetCode——杨辉三角
|
7月前
leetcode-118:杨辉三角
leetcode-118:杨辉三角
60 0
|
算法
【LeetCode】136. 只出现一次的数字、118. 杨辉三角
目录 136. 只出现一次的数字 118. 杨辉三角
54 0
leetcode:118. 杨辉三角
函数原型:int** generate(int numRows, int* returnSize, int** returnColumnSizes) 参数解析:numRows是指明要求前几行杨辉三角 returnSize是返回指针数组的元素个数 returnColumnSizes是指明杨辉三角每一行有几个元素
71 0
力扣118.杨辉三角
给定一个非负整数 numRows生成「杨辉三角」的前 numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。链接位置:力扣。
50 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行