📜  帕斯卡三角形的第 K 行 - 帕斯卡(1)

📅  最后修改于: 2023-12-03 15:25:26.091000             🧑  作者: Mango

帕斯卡三角形的第 K 行 - 帕斯卡

介绍

帕斯卡三角形是一种数字三角形,其中每一行的数字是由上面两个数字的和确定的。这种三角形被命名为法国数学家Blaise Pascal。在计算机科学中,帕斯卡三角形通常被用来生成杨辉三角、二项式系数和其他组合数。

示例:

第1行: 1

第2行: 1 1

第3行: 1 2 1

第4行: 1 3 3 1

...

题目描述

给定一个非负索引 k,其中 k ≤ 33,返回帕斯卡三角形的第 k 行。

注意,此处的行指数字数列,不是实际的一行字符串。

解法

一般来说,我们可以创建一个数组来保存计算的结果。在这种情况下,我们只需要两行数组,一个用于当前行,一个用于上一行,我们迭代每个元素,将它的值更新为上一行的相邻两个元素的和。

示例代码:

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        row = [1] * (rowIndex+1)
        for i in range(2, rowIndex+1):
            for j in range(1, i):
                row[i-j] += row[i-j-1]
        return row

这个解法的时间复杂度是 $O(k^2)$,空间复杂度是 $O(k)$。

另一种解法是空间优化。我们不需要保存所有的行,只需要保存两行的数据即可。在更新时,我们只需要从后向前迭代,这样就可以避免在更新第 $i$ 个元素时,改变了第 $i+1$ 个元素的值。

示例代码:

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        row = [1] * 2
        for i in range(2, rowIndex+1):
            row = [1] + [row[j] + row[j+1] for j in range(i-1)] + [1]
        return row

这个解法的时间复杂度是 $O(k^2)$,空间复杂度是 $O(k)$。