119. 杨辉三角 II

假装没事ソ 提交于 2020-02-08 05:43:39

本题仅仅要求返回索引对应的行。
思路1:递归。
根据递推公式,递归求上一行,最后求出当前行。

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        if rowIndex ==0 : return [1] # 起点为1
        else:
            lastRow = self.getRow(rowIndex-1) # 调用本身获取上一索引的结果,再计算当前行
            curRow = []
            for j in range(0,rowIndex+1):
                if j==0 or j==rowIndex: # 首尾为1
                    curRow.append(1)
                else: # 中间根据公式计算
                    curRow.append(lastRow[j-1]+lastRow[j])
            return curRow

在这里插入图片描述
如果多加两行判断索引为1和2,击败更多,哈哈:

elif rowIndex == 1: return [1,1]
elif rowIndex == 2: return [1,2,1]

在这里插入图片描述
思路2:动态规划。T(n)=O(K2), S(n)=O(K2)
1.初始化preRow (相当于dp数组
2.根据preRow 计算curRow
3.把curRow 赋值给preRow ,再计算新的curRow
4.迭代的计算下去。。。

class Solution:
    def getRow(self, rowIndex: int) -> List[int]
        preRow = [1] # 初始值
        if rowIndex==0: return preRow
        for i in range(1,rowIndex+1):
            curRow = []
            for j in range(0,i+1):
                if j==0 or j==i:
                    curRow.append(1)
                else:
                    curRow.append(preRow[j-1]+preRow[j])
            preRow = curRow
        return curRow

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!