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,一经查实,立即删除!

相关文章

SSM简单整合

SSM整合&#xff0c;SpringMVC,Spring,MyBatis的配置文件整合。 1.Spring和MyBatis的整合&#xff08;applicationContext.xml&#xff09;。 需要spring约束。 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springf…

The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized 偶然遇到的mysql时区问题

因为换了个电脑用&#xff0c;运行时报了个很少见的异常。如下&#xff1a; Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the …

可持续字典树 Perfect Security

题目链接 题目大意:给你两个序列&#xff0c;第二个序列可以任意进行排列变换&#xff0c;然后由这两个序列一一异或得到答案序列&#xff0c;要求答案序列的字典序最小。 可持续字典树与第K大可持续线段树的区别主要在于每个节点上 &#xff0c;它多了一个记录值。 因为线段树…

Docker容器的简单操作及应用部署

1.什么是虚拟化 虚拟化&#xff08;Virtualization&#xff09;是一种资源管理技术 &#xff0c;虚拟化技术种类很多&#xff0c;例如&#xff1a;软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等 。 2.什么是Docker Docker 是一个…

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

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

Jenkins的安装和卸载(转载)

今天安装jenkins后因为网路问题一开始没自动安装插件&#xff0c;后来想重新卸载安装一遍jenkins。找了一会才找到一篇,jenkins的卸载&#xff08;linux下&#xff0c;已尝试可以&#xff09; https://blog.csdn.net/chunlongyuan/article/details/79243143 最后jenkins服务仍…

codeforces 453C Little Pony and Summer Sun Celebration

codeforces 453C Little Pony and Summer Sun Celebration 这道题很有意思&#xff0c;虽然网上题解很多了&#xff0c;但是我还是想存档一下我的理解。 题意可以这样转换&#xff1a;初始所有点有 \(01\) 状态&#xff0c;每经过一次状态就翻转&#xff0c;求一条路径使得最后…

MongoDB无法注册windows服务问题解决 Error connecting to the Service Control Manager: 拒绝访问 Mongodb M

发现在mongodb.log里出现 2017-07-07T17:01:55.3390800 I CONTROL [main] Error connecting to the Service Control Manager: 拒绝访问。 (5) 错误 1.检查mongodb.conf配置内容是否有误. 2.cmd需要以管理员方式启动(c盘system32下cmd.exe). 3.执行mongod.exe --bind_ip 1…

保存图片验证码到redis数据库

def get_image_code(image_code_id): # 1 实用工具类生成验证码 name, text, image_data captcha.generate_captcha() #将验证码的数据和编号存储到 redis 中 try: #redis_store.set() 设置数据 #redis_store.expires()设置有效期 #setex&#xff1a;设置数据的同时设置有效期…

Eclipse项目无错误但是有红叉问题解决

这个问题可以从两方面下手。 1.是项目右键 ->properties ->java buildpath 解决里面的红叉问题。 2.就是项目.classpth文件问题解决 首先window ->show view-> other ->找到problem 如果是 The project cannot be built until build path errors are resol…

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

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

TCP close_wait内幕

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

p-value

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

webstorm激活

2018-12-20(最新可用&#xff0c;选中间的activetion code)&#xff1a; 前提&#xff1a;修改本地的hosts配置文件&#xff08;/etc/hosts&#xff09; 最后一行新增这句话&#xff1a;0.0.0.0 account.jetbrains.com 然后去 http://idea.lanyus.com/ 这个网站生成一个激活码…

面向对象初调用:foolish 电梯

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

Studio 3T更改使用时间破解免费使用方式(转,可以使用)

echo off ECHO 重置Studio 3T的使用日期...... FOR /f "tokens1,2,* " %%i IN (reg query "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" ^| find /V "installation" ^| find /V "HKEY") DO ECHO yes | reg a…

Maven学习之(一)基本配置

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

Rabbitmq java.util.concurrent.TimeoutException小问题解决

最近在研究rabbitmq的各个工作模式时。 出现了一个rabbitmq java.util.concurrent.TimeoutException异常 java.util.concurrent.TimeoutExceptionat com.rabbitmq.utility.BlockingCell.get(BlockingCell.java:77)at com.rabbitmq.utility.BlockingCell.uninterruptibleGet(B…

个人服务器

1、用yum install 安装太方便了&#xff0c;不用考虑依赖 yum install java yum install mysql yum install tomcat 一下子就搞定了。 安装好mysql好像并不能启动&#xff0c;还要yum install mariadb-server -y 具体看&#xff1a;https://blog.csdn.net/lixingdefeng…

org.hibernate.QueryTimeoutException: Could not execute JDBC batch update问题解决(转)

这个bug的原因就是 在插入数据操作时 插入字段的长度 超出了数据库表设计时的该字段长度 导致的这个异常 解决办法&#xff1a; 1.减短字段长度 2.增加字段长度限制 例&#xff1a;alter table table_name modify column_name varchar(50); 转&#xff1a;https://blo…