电脑软件下载平台哪个好,seo长沙,深圳网络科技有限公司,网站建设与网页制作案例杨辉三角#xff0c;是二项式系数在三角形中的一种几何排列#xff0c;在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲#xff0c;帕斯卡#xff08;1623----1662#xff09;在1654年发现这一规律#xff0c;所以这个表又叫做帕斯卡三角形。帕斯卡…杨辉三角是二项式系数在三角形中的一种几何排列在中国南宋数学家杨辉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行i1k0.实际一个空位#ki-1的时候填充1不等的时候填充0for k in range(i):if k i-1:row.append(1)else:row.append(0)#每行都是1 然后append到triangle因为列表调用列表所以更改row就好了浅copytriangle.append(row)#特殊情况当i0的时候 跳过本次循环进行下一次循环i 1if i 0:continue#找对称前2行特殊情况i0 or i1 带入此循环不执行第三行的时候就对称只有一个第四行的时候
#对称还是一个第五行的时候对称是2个对称的时候划一条竖线分析排除左右2边的1for j in range(i//2):
#第三层通过第2层的2个数相加然后更改对应的值value triangle[i-1][j]triangle[i-1][j1]row[j1] value
#利用负索引找到对应的位置把value的值赋值row[-j-2]value
print(triangle) triangle []
n 6
for i in range(n):row [1]*(i1)triangle.append(row)for j in range(i//2):vaule triangle[i-1][j]triangle[i-1][j1]row[j1]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 所以rangeifor j in range(i-1):
#i行的j元素等于i-1)行的值相加value triangle[i-1][j]triangle[i-1][j1]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][j1]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(i1):value triange[j]triange[-j-1]newline.append(value)print(newline)triangenewline
# triange.insert(0,0)triange.append(0) 第四种方式单行覆盖 1.每次都要在循环里清除列表有点浪费时间值开辟一个列表利用对称和覆盖2.明确最大行的元素个数前6行最大的元素个数是6个下一行等于首元素不变覆盖中间元素 #row [1,1,1,1,1,1]
# n 6
# [:1] i0 offset6 jrange(1,1) jump
# [:2] i1 offset5 jrange(1,1) jump
#
# [:3] i2 offset4 jrange(1,2)
# [:4] i3 offset3 jrange(1,2)
# [:5] i4 offset2 jrange(1,3)
# [:6] i5 offset1 jrange(1,3)
n 6
row [1]*n
for i in range(n):
#4行和6行对称的负所以是-2-2-3定义的偏移量offset和j做运算方便找到符所以的位置offset n-i
#所以为1的位置都是1x,所以z1是定义第一个1定义在for循环外规避覆盖影响
#此处不用z1来设置临时变量valrow[0]row[j]的话 在算到索引位2的时候就错了因为row[0]是固定值z 1for j in range(1,i//21):val zrow[j]row[j],z val ,row[j]if i !2*j:row[-j-offset] valprint(row[:i1]) 转载于:https://www.cnblogs.com/harden13/p/8659895.html