当前位置:
首页 >
Python杨辉三角
发布时间:2023/12/20
47
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Python杨辉三角
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年
第一种解决方法:
1.一次性开辟每行的内存空间
2.利用对称性解决
triangle = [] n = 6 for i in range(n):#row 定义了left的1 ,索引第二层循环的范围就是i,第0行0个值,第一行1个值,第二行2个值row = [1]#此层循环每层的个数,抛除已经定好的1,当2行i=1,k=0.实际一个空位#k=i-1的时候填充1,不等的时候填充0for k in range(i):if k == i-1:row.append(1)else:row.append(0)#每行都是1 然后append到triangle,因为列表调用列表,所以更改row就好了(浅copy) triangle.append(row)#特殊情况,当i=0的时候 跳过本次循环,进行下一次循环i = 1if i == 0:continue#找对称,前2行特殊情况,i=0 or i=1 带入此循环不执行,第三行的时候就对称只有一个,第四行的时候 #对称还是一个,第五行的时候对称是2个,对称的时候划一条竖线分析,排除左右2边的1for j in range(i//2): #第三层通过第2层的2个数相加,然后更改对应的值,value = triangle[i-1][j]+triangle[i-1][j+1]row[j+1] = value #利用负索引找到对应的位置把value的值赋值row[-j-2]=value print(triangle) triangle = [] n = 6 for i in range(n):row = [1]*(i+1)triangle.append(row)for j in range(i//2):vaule = triangle[i-1][j]+triangle[i-1][j+1]row[j+1]=vaulerow[-j-2]=vaule print(triangle)
第二种方法:
1.下一行依赖上一行所有元素,是上一行所有元素的两两相加的和,再在两头各加1。
#把前2行特殊情况单独拿出,用列表嵌套来表示 triangle = [[1],[1,1]] #从第三行开始循环 for i in range(2,6): #定义新列表放每行的数字元素newline = [] #每行先从空列表append 一个1 [1]newline.append(1) #在每行列表中增加对应的数字,i行应该有i个数字,但是已经定义好了左侧第一个元素为1 ,所以range(i)for j in range(i-1): #i行的j元素等于(i-1)行的值相加value = triangle[i-1][j]+triangle[i-1][j+1]newline.append(value) #填充右侧的1newline.append(1)triangle.append(newline) print(triangle)triangle = [] n = 6 for i in range(n):newline = [1]triangle.append(newline)if i == 0:continuefor j in range(i-1):val = triangle[i-1][j]+triangle[i-1][j+1]newline.append(val)#利用到了深浅拷贝的知识,复杂列表,调用的引用地址,更改了newline列表 索引triangle列表也随之更改newline.append(1) print(triangle)
第三种方法
1.除了第一行以外,每一行每一个元素(包括两头的1)都是由上一行的元素相加得到。如何得到两头的1呢? 目标是打印指定的行,所以算出一行就打印一行,不需要用一个大空间存储所有已经算出的行
triange = [1] print(triange) #triange.insert(0,0) triange.append(0) n = 6 for i in range(1,n):newline = []for j in range(i+1):value = triange[j]+triange[-j-1]newline.append(value)print(newline)triange=newline # triange.insert(0,0)triange.append(0)第四种方式:单行覆盖
1.每次都要在循环里清除列表有点浪费时间,值开辟一个列表,利用对称和覆盖
2.明确最大行的元素个数,前6行最大的元素个数是6个,下一行等于首元素不变覆盖中间元素
转载于:https://www.cnblogs.com/harden13/p/8659895.html
总结
以上是生活随笔为你收集整理的Python杨辉三角的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: linux 宽带连接
- 下一篇: python杨辉三角金字塔