题目:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解答:
又是dp,巧的很,这里的每一个数都是二项式系数C(i, j)
方程C(i ,j) = C(i -1, j - 1) + C(i - 1, j)(其实题目已经说得很清楚了)
初值C(i, 0) = 1(每行第一个数都是1), C(i, i) = 1(每行最后一个数都是1)
于是可以这么写:
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
C = [[0 for i in range(0, numRows)] for j in range(0, numRows)]
for i in range(0, numRows):
for j in range(0, numRows):
if j == 0 or j == i:
C[i][j] = 1
else:
C[i][j] = C[i - 1][j - 1] + C[i - 1][j]
for i in range(0, numRows):
C[i][:] = C[i][:i+1]
return C