给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
我思路:
输出为一个一列numRows行的矩阵(这里用一个列表),每个元素是一个列表m。下标为i的元素,其元素个数为i+1。
n[i][j]=n[i-1][j-1]+n[i-1][j](若两项中一项不存在则不加那项)
n[0][0]=[1]
用append添加元素
class Solution(object):
def generate(self, numRows):
n=[]
if numRows==0:
return n
n.append([1])
for i in range(1,numRows):
m=[]
for j in range(i+1):
if j-1==-1:
x=n[i-1][j]
elif j==i:
x=n[i-1][j-1]
elif j-1!=-1 and j!=i:
x=n[i-1][j-1]+n[i-1][j]
m.append(x)
n.append(m)
return n
官方:
1.他先填第一个和最后一个元素,就不用考虑坐标的特殊情况了。
2.先初始化好m的大小
3.不用担心numRows为0 的情况,因为下面的for不会执行,且第一个元素【1】的添加也是在循环内部执行的
class Solution(object):
def generate(self, numRows):
n=[]
for i in range(numRows):
m=[None for _ in range(i+1)]#m已经初始化为长度为i+1,元素全为None。所以后面就不用一次一个地append了
m[0],m[-1]=1,1#先把第一个和倒数第一个填好,就不用在下面的坐标中考虑特殊情况
for j in range(1,i):
m[j]=n[i-1][j-1]+n[i-1][j]
n.append(m)
return n