#思路
假设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]