def generate(self, numRows):
if numRows == 0:
return []
if numRows == 1:
return [[1],]
a = [[0]*num for num in xrange(1, numRows+1)]
a[0] = [1]
for i in xrange(1, numRows):
a[i][0], a[i][i] = 1, 1
for j in xrange(1, len(a[i])-1):
a[i][j] = a[i-1][j] + a[i-1][j-1]
return a
给定numRows,生成Pascal三角形的第一个numRows。
例如,给定numRows = 5, 返回
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
我是一名编程新手,并尝试练习我的编码能力。我希望你可以首先根据我的代码改进我的代码,而不是简单地重写它。此外,还欢迎您以更整洁的方式提供自己的代码。
非常感谢你!
答案 0 :(得分:1)
通过分离main函数,可以避免使用多维数组和大量索引:
def _generate_row (row_number, prev_row):
if row_number == 1:
return [1]
row_data = [0] + prev_row + [0]
return [sum(row_data[a:a+2]) for a in xrange(0, len(row_data)-1)]
def generate(num_rows):
prev_row = None
for i in xrange(1, num_rows+1):
prev_row = _generate_row(i, prev_row)
yield prev_row
print list(generate(5))
下一步,您可以优化行生成 - 它是对称的,因此您不需要通过xrange(len(a [i]) - 1),只需要它的一半。
并使用snake_case - 它是一个蟒蛇! =)