文章目录
- 一、问题描述
- 二、问题分析
- 三、第一种方法
- 1、具体代码
- 2、运行结果
- 3、程序的改进
- 四、第二种方法
- 1、具体代码
- 2、运行结果
- 五、总结分析
一、问题描述
给定一个非负整数 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 xn = 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, 1for j in range(1, len(row) - 1):row[j] = triangle[i - 1][j] + triangle[i - 1][j - 1]triangle.append(row)return triangleif __name__ == '__main__':a = Solution()s = a.generate(5)print(s)
2、运行结果
五、总结分析
用Python输出杨辉三角,尤其是第二种方法里的创建指定长度的空列表,这种方式值得学习。