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个,下一行等于首元素不变覆盖中间元素

#row = [1,1,1,1,1,1]
# n = 6
# [:1]    i==0  offset==6        j=range(1,1)    jump
# [:2]    i==1  offset==5        j=range(1,1)    jump
#
# [:3]    i==2  offset==4        j=range(1,2)
# [:4]    i==3  offset==3        j=range(1,2)
# [:5]    i==4  offset==2        j=range(1,3)
# [:6]    i==5  offset==1        j=range(1,3)
n = 6
row = [1]*n
for i in range(n):
#4行和6行对称的负所以是-2;-2,-3;定义的偏移量offset和j做运算方便找到符所以的位置offset = n-i
#所以为1的位置都是1+x,所以z=1是定义第一个1,定义在for循环外,规避覆盖影响
#此处不用z=1来设置临时变量,val=row[0]+row[j]的话 在算到索引位2的时候就错了,因为row[0]是固定值z = 1for j in range(1,i//2+1):val = z+row[j]row[j],z = val ,row[j]if i !=2*j:row[-j-offset] = valprint(row[:i+1])

 

转载于:https://www.cnblogs.com/harden13/p/8659895.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP 数据库连接池实现(转)

转自https://blog.csdn.net/Marksinoberg/article/details/53857511 摘要xml 读取配置文件 简易方式常规方式PHP解析XML 配置文件解析数据库连接池测试 申请过多时拒绝请求已满后拒绝放入总结此文着实无聊,不要浪费时间往下看啦 摘要 之前总是以脚本面向过程的方式…

批量处理JDBC语句提高处理速度

当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率JDBC的批量处理语句包括下面两个方法:– addBatch(String):添加需要批量处理的SQL语句或…

TCP close_wait内幕

最近调试时遇到一个tcp连接 一发交易server端就从es连接状态变成close_wait状态的问题。 tcp连接需要三次握手,而被动关闭连接则是需要四次握手的,不能说单方面关闭连接就是成功关闭连接了。 首先我们要搞清楚close_wait出现的机制和原理。 close_wai…

p-value

p-value p-value翻译为假定值,假设几率。我们在生物信息中通常使用p值方法(P-Value, Probability, Pr)来做检验。那么p-value是什么呢?其实P-value就是一种概率,表示在原假设为真的前提下出现观察样本以及更极端情况的…

面向对象初调用:foolish 电梯

本周我们完成的任务是傻瓜电梯的调度,对于那十分十分详细的指导书,我感觉想要说明白题目要求,是做不到的,所以就把指导书贴出来给大家看了,,由于在下还不会网页制作,只能通过百度网盘了&#xf…

Maven学习之(一)基本配置

安装maven还几次没成功,不过最后还是查资料成功了,所以记录一下。 1.安装JDK,比较简单,就不说明了。 2.配置java的环境变量 JAVA_HOME (最开始因为java配置成C:\Program Files (x86)\Java\jdk1.8.0_144\bin 所以出问题…

浅学习使用Ribbon 和 Feign的理解和使用

Ribbon是Netflix公司开源的一个负载均衡的项目,是一个基于 HTTP、TCP的客户端负载均衡器. 什么是负载均衡? 负载均衡是微服务架构中必须使用的技术,通过负载均衡来实现系统的高可用、集群扩容等功能。负载均衡可通过 硬件设备及软件来实现,硬件比如&am…

OSI七层协议模型

OSI七层协议模型 1. OSI七层和TCP/IP四层的关系 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和…

Centos启动卡住,starting auditd: [failed]

具体原因可能是什么权限导致的吧 &#xff0c;母鸡啊 解决方式&#xff1a; 在重启客户端时输入 i 然后输入 a &#xff0c;在<_root KEYBOARDTYPEpc KEYTABLEus rd_NO_DM后空格输入 single再 enter就进入了

FPGA中计数器设计探索

FPGA中计数器设计探索&#xff0c;以计数器为32位为例&#xff1a; 第一种方式&#xff0c;直接定义32位计数器。 reg [31:0]count; quartus ii 下的编译&#xff0c;资源消耗情况。 85C模型下的时钟频率。 0C模型下的时钟频率。 chip planner下资源分布情况。 第二种方式&…

MongoDB服务无法注册

按此步骤执行出现无法注册服务名问题时&#xff0c;如下解决&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 如果还是无法解决的话&#xff0c;首先卸载MongoDB&#xff0c;然后清MongoDB注册表&#xff0c;重新安装&#xff0c;然后按一开始那样执行mongo.conf文件&am…

006 list类型

一.概述 在redis之中,我们需要把list视为一个链表,存储的元素我们需要视为一个字符串(可以是序列化的字符串). list的核心就是 : 有序的字符串列表. 二 .基本操作 [1]lpush , rpush 从左方向和右方向追加元素 [2] 查询指定范围的数据 --- lrange index last_indezx [3] 获取指…

SpringBoot学习笔记(8):事物处理

SpringBoot学习笔记&#xff08;8&#xff09;&#xff1a;事物处理 快速入门 在传统的JDBC事务代码开发过程中&#xff0c;业务代码只有一部分&#xff0c;大部分都是与JDBC有关的功能代码&#xff0c;比如数据库的获取与关闭以及事务的提交与回滚、大量的try..catch..finally…

如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity

代码的环复杂度(Cyclomatic complexity&#xff0c;有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准&#xff0c;在1976年由Thomas J. McCabe, Sr. 提出。 在软件测试的概念里&#xff0c;圈复杂度用来衡量一个模块判定结构的复杂程度&#xff0c;数量上表现为独立线性路…

ZuulFilter的使用场景

各个微服务的访问需要网关统一管理进行跳转&#xff0c;而在访问网关时&#xff0c;我们可以进行增强功能&#xff0c;通过过虑器实现请求过虑&#xff0c;身份校验 等。 /*** 身份校验过滤器*/ Component public class LoginFilter extends ZuulFilter {AutowiredAuthServic…

机器学习实战 k-近邻算法 手写识别系统

转载于:https://www.cnblogs.com/crysa/p/8735556.html

Fegin拦截器解决各微服务之间数据下沉

上篇说了当前端访问微服务网关&#xff0c;借助ZuulFilter过滤器来过滤所有请求&#xff0c;获取request&#xff0c;判断cookie是否有身份短令牌&#xff0c;request的header中是否有Jwt令牌&#xff0c;redis中是否有Jwt令牌。但是这个数据传递只能是前端访问微服务时&#x…

免杀原理与实践

杀软原理 目前杀毒软件的原理主要有3种&#xff1a; 1.引擎与病毒库的交互作用&#xff0c;通过特征码提取与病毒库中的特征码进行比对识别病毒。 2.启发式Heuristic&#xff0c;通过程序的一些行为和特征来判断。 3.在虚拟机技术上的启发式&#xff0c;通过建立一个虚拟环境运…

分布式事务的理解和解决方法

什么是分布式事务&#xff1f; 什么是分布式系统?部署在不同结点上的系统通过网络交互来完成协同工作的系统。 比如&#xff1a;充值加积分的业务&#xff0c;用户在充值系统向自己的账户充钱&#xff0c;在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统…

delphi 搭建安卓开发环境

delphi 搭建安卓开发环境 DELPHI安装成功以后&#xff0c;怀着激动的心情&#xff0c;使用IDE向导生成安卓DEMO程序&#xff0c;BUILD&#xff0c;想马上看到编译成功的提示&#xff0c;结果报错&#xff0c;不由得傻眼了。DELPHI怎么这么差&#xff1f; 原来DELPHI安装成功以后…