044-力扣刷题-119--杨辉三角-II

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 PascalTriangleAnimated2.gif 图片.png

示例:

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

进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

特别复杂的空间复杂度

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        result = []
        for i in range(rowIndex+1):
            result.append([])  #循环对每一行进行操作,每一行都是一个一维的list
            for j in range(i+1): #对这一行的每一个元素进行操作,因为没行正好是i+1个元素
                if j in (0,i):  #如果遍历这一行的元素进行操作的时候,首尾索引的元素存的应该都是1
                    result[i].append(1) #取出二维列表的这一行进行添加操作
                else:#否则的是上一行的前一列跟上一行的同一列的值进行相加
                    result[i].append(result[i-1][j-1]+result[i-1][j])
        return result[rowIndex]

````

优化完的

```python
class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        result = [1] + [0]*rowIndex  #先将这一行设置一个初始值,其实也是第一行
        for i in range(1,rowIndex+1): #从第二行开始对每一行进行操作,所以是1,rowindex+1
            for j in range(i,0,-1):  #每下一行的操作如下,当前i对应的就是这一行最右侧数的索引
                result[j]=result[j]+result[j-1]  #从最右侧的数开始进行数的更新更新到第二个数,当前索引对应的数,变成当前值加上左侧一位数字的和,这样一次次的循环下来就可以了
        return result

图片.png 思想就是倒着看,当前行位置的元素等于上一行当前位置的元素加前一个位置的元素的值.