一、问题描述
给定一个非负整数 n,生成「杨辉三角」的前 n行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
二、问题分析
要生成杨辉三角,肯定需要用到双层for循环,用i表示行数,用j表示列数。用**triangle[i][j]**表示每一个数的具体位置
三、第一种方法
1、具体代码
def triangle(n):
x = [] # 存放最终结果
for i in range(n):
if i == 0:
x.append([1]) # 第一行
elif i == 1:
x.append([1, 1]) # 第二行
# 第三行以后
else:
y = [] # 存放一行,每次清空
for j in range(i + 1):
if j == 0 or j == i:
y.append(1)
else:
y.append(x[i - 1][j - 1] + x[i - 1][j])
x.append(y)
return x
n = 6
a = triangle(n)
for i in range(len(a)):
print(a[i])
2、运行结果
3、程序的改进
def triangle(n):
x = [] # 存放最终结果
for i in range(n):
y = [] # 存放一行,每次清空
for j in range(i + 1):
if j == 0 or j == i:
y.append(1)
else:
y.append(x[i - 1][j - 1] + x[i - 1][j])
x.append(y)
return x
四、第二种方法
1、具体代码
class Solution:
def generate(self, numRows):
triangle = [] # 创建列表存放最终结果
for i in range(numRows):
#row里面存放的是每一行的元素
row = [None for _ in range(i + 1)] # 创建空列表
row[0], row[-1] = 1, 1
for j in range(1, len(row) - 1):
row[j] = triangle[i - 1][j] + triangle[i - 1][j - 1]
triangle.append(row)
return triangle
if __name__ == '__main__':
a = Solution()
s = a.generate(5)
print(s)
2、运行结果
五、总结分析
用Python输出杨辉三角,尤其是第二种方法里的创建指定长度的空列表,这种方式值得学习。