杨辉三角Python

文章提供了一段使用Python生成杨辉三角的代码,通过二维列表存储,并转换为一维列表。作者注意到当前实现存在性能问题,可能会在某些比赛中超时。代码中使用了嵌套循环,并基于上一行的数据计算当前行的值。最后,通过字符串方法将列表转换为一维形式,并讨论了转换过程中需要将数字转换为字符串的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

杨辉三角如图

 

用Python写出杨辉三角的代码,二维列表存储,可以再转为一维列表存储。根据输入的行数生成对应行的图数据。我的做法比较耗时,在一些比赛中会超时,亲测。

Talk is cheap,Show me the code.

a=[[1],[1,1],]
n=eval(input())
for i in range(2,n):
    for j in range(i+1):
        if j==0:
            a.append([None]*(i+1))
            a[i][j] = 1
            continue
        if i==j:
            a[i][j]=1
            break
        a[i][j]=a[i-1][j-1]+a[i-1][j]
print(a)
s=''
for i in a:
    s+=','.join([str(j) for j in i])
    s+=','
print(s.split(','))
s=''
for i in a:
    s+=','.join([str(j) for j in i])
    s += ','
print(s)
s=s.split(',')
del s[-1]     #  末尾有一个空字符,删除,不然下面转化会出问题
print([int(i) for i in s])

i,j 分别代表行列,j为0时表示新一行的开始,i和j相等时表示到了行尾。其余就可以用上一行的头顶上的两个数做加法得到。

可以用字符串的方法变为一维列表,join为什么非得str()转换呢?因为,它不能连接数字int型,所以就先转为字符,如果需要int型,再转一步即可。

这是没有转为str时的报错信息:TypeError: sequence item 0: expected str instance, int found

 

结果:

 

### 杨辉三角形的生成方法 以下是基于 Python 的一种实现杨辉三角形的方法。此代码通过迭代的方式构建每一行的数据结构,并利用列表推导式简化计算过程。 ```python def generate_pascals_triangle(n): triangle = [] for i in range(n): row = [1] * (i + 1) # 初始化当前行为全1 if i >= 2: # 当前行数大于等于2时才需计算内部值 for j in range(1, i): row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j] # 中间值由上一行相邻两数值相加得到 triangle.append(row) return triangle # 调用函数并打印前5行杨辉三角形 result = generate_pascals_triangle(5) for row in result: print(row) ``` 上述代码实现了动态规划的思想来生成杨辉三角形,其中每行的第一个和最后一个元素始终为 `1`,而其他位置上的值则依赖于其上方两个邻近元素之和[^1]。 如果希望更简洁地表达这一逻辑,可以采用如下方式: ```python from typing import List def pascals_triangle(n: int) -> List[List[int]]: res = [[1]] for _ in range(1, n): prev_row = res[-1] new_row = [a+b for a, b in zip([0]+prev_row, prev_row+[0])] res.append(new_row) return res[:n] # 打印结果 triangle = pascals_triangle(10) for line in triangle: print(line) ``` 这段代码同样能够生成指定数量的杨辉三角形行数,并且更加紧凑高效[^2]。 对于初学者而言,理解这些算法的核心在于掌握如何从已知条件出发逐步扩展未知部分,以及熟悉列表操作技巧如切片(slice)与zip函数的应用场景[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TinyLight1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值