LeetCode题练习与总结:杨辉三角Ⅱ--119

203 篇文章 0 订阅
56 篇文章 0 订阅

一、题目描述

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

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

示例 1:

输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:

输入: rowIndex = 0
输出: [1]

示例 3:

输入: rowIndex = 1
输出: [1,1]

提示:

  • 0 <= rowIndex <= 33

二、解题思路

在杨辉三角中,每一行的第一个数和最后一个数都是1,其余的数是它正上方和左上方两个数的和。我们可以利用这个性质来逐行构建杨辉三角。

具体步骤如下:

  1. 初始化一个列表result,用于存放最终的结果,初始时只有一个元素1。
  2. 对于每一行,从倒数第二个元素开始,更新每个元素为它和它前一个元素的和。
  3. 在每一行的最后添加一个1。
  4. 重复步骤2和3,共rowIndex次。
  5. 返回最终的result列表。

三、具体代码

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> result = new ArrayList<>();
        result.add(1);
        for (int i = 0; i < rowIndex; i++) {
            for (int j = i; j > 0; j--) {
                result.set(j, result.get(j) + result.get(j - 1));
            }
            result.add(1);
        }
        return result;
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 外层循环执行了rowIndex次,即行数。
  • 内层循环在最坏情况下(即最后一行)执行了rowIndex次,因为每次循环都会将当前位置的元素更新为前两个元素的和。
  • 因此,内层循环的总执行次数是1 + 2 + 3 + … + rowIndex,这是一个等差数列求和,其和为((1 + rowIndex) * rowIndex) / 2。
  • 综合外层循环和内层循环,总的时间复杂度是O(rowIndex^2)。
2. 空间复杂度
  • 结果列表result的大小随着行数的增加而增加,最终大小为rowIndex + 1
  • 因此,空间复杂度主要取决于结果列表的大小,即O(rowIndex)。

综上所述,代码的时间复杂度是O(rowIndex^2),空间复杂度是O(rowIndex)。

五、总结知识点

  1. 列表(List)的使用List<Integer> 是 Java 中的泛型列表,用于存储整数类型的数据。在这里,它被用来存储杨辉三角的每一行数据。

  2. ArrayList 的初始化ArrayList<Integer> result = new ArrayList<>(); 初始化一个新的 ArrayList 对象。

  3. 列表添加元素result.add(1); 用于在列表的末尾添加一个元素。

  4. 循环结构for 循环用于重复执行一系列操作。这里有双层循环,外层循环用于控制行数,内层循环用于更新每一行的元素值。

  5. 列表元素访问和修改result.get(j) 用于获取列表中索引为 j 的元素值,result.set(j, value) 用于将列表中索引为 j 的元素值设置为 value

  6. 杨辉三角的性质:代码利用了杨辉三角的性质,即每一行的第一个和最后一个元素都是1,其他元素是它正上方和左上方两个元素的和。

  7. 数组的索引操作:在更新每一行元素时,代码通过索引来访问和修改列表中的元素。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学习永不止步

谢谢您的鼓励,我会再接再厉的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值