Bootstrap

力扣——【119. 杨辉三角 II】

 #思路

假设rowIndex为0,第一个for循环为0,不能运行,+1

第二个for循环为0,不能运行,+1(range()的临界值)

附加条件:如果j==0 or j==i,即处于三角形直边和对角线上的数值为1

其他地方数值需调用二维数组公式

所返回的数组是二维数组

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        f=[]
        for i in range(rowIndex+1):
            l=[]
            for j in range(i+1):
                if j==0 or j==i:
                    l.append(1)
                else:
                    l.append(f[i-1][j]+f[i-1][j-1])
            f.append(l)
        return f[rowIndex]

#改进算法

使用动态数组,降低空间复杂度,编程要点在于,一开始构建一个符合条件的两行的二维数组,动态的对每一行赋值

此题动态数组的关键:

1、设置两个下标,通过下标的交换,轮流对每一组赋值

2、构建完数组需要给第一行第一个元素赋值,这是杨辉三角的关键

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        f=[]
        for i in range(2):
            l=[]
            for j in range(rowIndex+1):
                l.append(0)
            f.append(l)
        pre=0
        now=1
        f[pre][0]=1
        for i in range(1,rowIndex+1):
            for j in range(i+1):
                if j==0 or j==i:
                    f[now][j]=1
                else:
                    f[now][j]=f[pre][j]+f[pre][j-1]
            pre,now=now,pre
        return f[pre]

 

 

;