给定一个正整数,输出杨辉三角的对应行元素

1.题目描述

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
给定整数然后输出杨辉三角的对应行的元素

  • 上面的例子是输入整数3,给出的结果

2.输入输出案例

  • 示例 1:
    输入: rowIndex = 3
    输出: [1,3,3,1]
  • 示例 2:
    输入: rowIndex = 0
    输出: [1]
  • 示例 3:
    输入: rowIndex = 1
    输出: [1,1]

3.解题思路(语言不限C++/C/java/python均可)

  1. 由我们之前杨辉三角问题可知,当所求行大于2时,当前所求行地元素只与上一行元素有关(current_row[i][j] = pre_row[i-1][j] + pre_row[i-1][j-1]),** 又因为题目只求某一行,所以我们可以利用这种关系来简化存储(只用存两行即可) **
  2. 题目只要求输出一个列表(数组),包含指定行的元素,故不用存储0-tar(tar假设为题目给定的行号)所有行的元素,可以只设置两个列表pre,now,当行号大于2时,pre用于存储上一行元素,now用来计算当前行元素。

4.代码实现

def getRow(self, rowIndex: int) -> List[int]:
        if rowIndex == 0: # 第零行和第一行直接输出
            return [1]
        elif rowIndex == 1:
            return [1,1]
        else: # 设置两个列表(数组)只记录两行的元素
            pre = [1,1] # 初始化的pre
            now = []
            idx = 2 # 既然不是第0和1行,那么从第二行开始(若是第0,1行就直接执行上面两分支其一了)
            while idx < (rowIndex + 1):
                row_idx = 0 # 新的一行的下标
                while row_idx <= idx: # 第一个或最后一个元素只能是1
                    if row_idx == 0 or row_idx == idx:
                        now.append(1)
                    else: # 利用上一行同列和上一行前一列元素计算当前元素
                        num = pre[row_idx] + pre[row_idx - 1]
                        now.append(num)
                    row_idx += 1
                pre = now # 将最新的now赋值给pre,计算下一行的元素
                now = [] # now每次置为空,最后一次因为now为空,故最终结果在pre中
                idx += 1
        return pre # 返回最终结果
杨辉三角一个数学上十分有名的图形,它是以二项式系数为元素构成的数列,满足如下性质: 1. 每数字左右对称,由 1 开始逐渐变大,再变小,并最终回到 1。 2. 第 n (从 0 开始)的数字有 n + 1 项,前 n + 1 项依次为 1, a, b, c, ..., 其中 a、b、c 等元素可以根据上一元素通过组合计算得出。 例如,第 0 只有一个元素 1;第 1 有两个元素 1 和 1,第 2 有三个元素 1、2、1,第 3 有四个元素 1、3、3、1,以此类推。 以下是生成杨辉三角Python 代码: ```python def generate(numRows): """ :type numRows: int :rtype: List[List[int]] """ triangle = [] for i in range(numRows): row = [None for _ in range(i+1)] row[0], row[-1] = 1, 1 for j in range(1, len(row)-1): row[j] = triangle[i-1][j-1] + triangle[i-1][j] triangle.append(row) return triangle ``` 其中,triangle 是一个二维列表,用于存储杨辉三角。第 i 元素存储在 triangle[i] 中,每元素个数为 i+1,最左边和最右边的元素都是 1,其余元素可以根据上一元素通过组合计算得出。具体地,对于第 i 的第 j 个元素(0 <= j <= i),我们有: triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j] 这里,triangle[i-1][j-1] 表示上一的左上角元素,triangle[i-1][j] 表示上一的右上角元素,它们相加即可得到当前元素。最后,我们将每元素添加到 triangle 列表中,最终返回这个列表即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SweetCode

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值