题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
算法思想:
这道题令人难受的地方并不是求中间位置元素的大小,而是如果把每行第一个元素和最后一个元素置为1。
有两种想法是可行的:
1.先将所有的元素置为1,再去修改要做加和的元素
自己写的打败了99%,高兴一下
2.在杨辉三角的两侧‘包裹’上一层的0,这样,每个元素都可以用相同的公式将各个位置的元素求出来
代码1:
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
if not numRows:
return []
result =[]
i = 0
while i < numRows:
i += 1
s = [1] * i
if i > 2:
for j in range(1, i-1):
s[j] = result[i-2][j-1] + result[i-2][j]
result.append(s)
return result
代码2:
if not numRows:
return []
p = [1]
r = [p]
i = 1
while i < numRows:
i+=1
s = [0] * i
p = [0] + p + [0]
for j in range(i):
s[j] = p[j] + p[j+1]
r.append(s)
p = s
return r