python中杨辉三角形的规律_杨辉三角的几种解法(python)

1. 计算杨辉三角,普通法

#计算杨辉三角 普通法

triangle = [[1],[1,1]]

for i in range(2,6):

swap = triangle[i-1]

cul = [1]

for j in range(i-1):

cul.append(swap[j]+swap[j+1])

cul.append(1)

triangle.append(cul)

triangle

#计算杨辉三角 普通法

triangle = [[1],[1,1]]

n = 8

for i in range(2,n):

swap = triangle[-1]

cul = [1]

for j in range(len(swap)-1):

cul.append(swap[j] + swap[j+1])

cul.append(1)

triangle.append(cul)

print(triangle)

2. 计算杨辉三角 补0法

#计算杨辉三角 补0法/在每行末尾补零

tra = [[1]]

for i in range(1,6):

swap = tra[i-1]+[0]

cul = list()

for j in range(i+1):

cul.append(swap[j-1]+swap[j])

tra.append(cul)

print(tra)

#计算杨辉三角 补0法

triangle = [[1]]

n = 7

for i in range(1,n):

swap = triangle[i-1]+[0]

cul = [1]

for j in range(len(swap)-1):

cul.append(swap[j]+swap[j+1])

triangle.append(cul)

print(triangle)

3. 杨辉三角,对称法

#杨辉三角,对称法

n=6

triangle = [[1],[1,1]]

for i in range(2,n):

tmp = triangle[-1]

cul = [1] * (i+1)

for j in range(i//2):

cul[j+1] = tmp[j]+tmp[j+1]

if i != 2j:

cul[-j-2] = cul[j+1]

triangle.append(cul)

triangle

中点的确定:

[1]

[1,1]

[1,2,1]

[1,3,3,1]

[1,4,6,4,1]

[1,5,10,10,5,1]

把整个杨辉三角看成一个左对齐的二维矩阵。

i

位置

中点索引

i == 2时

在第3行

中点的列索引j==1

i == 3时

在第4行

无中点

i == 4时

在第5行

中点的列索引j==2

得到以下规律,如果i==2j,则有中点。

4. 杨辉三角,单列表方法

#杨辉三角,单列表解决

n = 6

row = [1] * n

for i in range(n):

z = 1

offset = n - i

for j in range(1,i//2+1):

val = z + row[j]

z = row[j]

row[j] = val

if i != 2*j:

row[-j - offset] = val

print(row[:i+1])

5. 新旧两行,一次性开辟新行

m = 6

#新旧两行,一次性开辟新行

ordline = []

for i in range(m):

newline = [1] * (i+1)

for j in range(2,i+1):

newline[j-1] = oldline[j-1]+oldline[j-2]

oldline = newline

print(newline)

这几种方法都是利用杨辉三角的性质:

每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和。

其中通过计算比较,第五种方法一次性开辟内存空间的方法要比第一种方法中,每次计算通过append添加新的内存空间要快。

未完续待。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值