每日leetcode-数组-119. 杨辉三角 II

分类:数组-二维数组及滚动数组

题目描述:

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

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

解题思路:

1.先生成k行的杨辉三角,再返回最后一行即第k行。

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        ret = []
        for i in range(1,rowIndex+2):
            temp = [1 for i in range(i)]
            for j in range (1,len(temp)-1):
                temp[j] = ret[i-2][j-1]+ret[i-2][j]
            ret.append(temp)
        return ret[-1]
class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        ret = list()
        for i in range(rowIndex+1):
            row = list()
            for j in range(0, i + 1):
                if j == 0 or j == i:
                    row.append(1)
                else:
                    row.append(ret[i - 1][j] + ret[i - 1][j - 1])
            ret.append(row)
        return ret[-1]

2.用一维数组,类似于动态规划中的滚动数组思想。

使用一维数组,然后从右向左遍历每个位置,每个位置的元素res[j]+= 其左边的元素 res[j - 1]。

为啥不从左向右遍历呢?因为如果从左向右遍历,那么左边的元素已经更新为第 i 行的元素了,而右边的元素需要的是第 i - 1行的元素。故从左向右遍历会破坏元素的状态。

 

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        ret = [1] * (rowIndex + 1)
        for i in range(2, rowIndex + 1):
            for j in range(i - 1, 0, -1): #倒序取到下标为0的位置,但是不包括0
                ret[j] += ret[j - 1]
        return ret

 

posted @ 2021-05-05 11:15  LLLLgR  阅读(49)  评论(0编辑  收藏  举报