美文网首页Python全栈工程师
9.2-杨辉三角基本解法和补零法

9.2-杨辉三角基本解法和补零法

作者: BeautifulSoulpy | 来源:发表于2019-08-17 08:44 被阅读1次

保持自己的心态:不证明,不解释,不道歉,不纠结,不较真,不对抗,不强迫(强加自己的观点),不说教(评判一个人,误会别人);

做一个有情怀的人;一个人有没有用心去感受一些人一些事,然后跟这个事情有深度的链接

本章节关键:容器list的内容可以后面改变,地址并不改变;
list主要的问题是:索引的使用

所有的算法问题都是数学游戏;公式的写法不同而已

练习:打印杨辉三角:

#解法1:先凑,再确定边界;慢慢一步步解决问题;
n = int(input('>>>'))
tri = [[1],[1,1]]   # 0,1


for i in range(2,n):  #[0,5]
    pre = tri[i-1]   # 前面的2行
    cur=[1]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
    for j in range(i-1):
        cur.append(pre[j]+pre[j+1])
        
    cur.append(1)
    tri.append(cur)
print(tri)
---------------------------------------------------------------------
>>>5
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]


#解法1优化:range(n)  循环n下 ,range(0),不仅如此循环,循坏0下;
n = int(input('>>>'))
tri = [[1]]   # 0,1


for i in range(1,n):  #[0,5]
    pre = tri[i-1]   # 前面的2行
    cur=[1]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
    for j in range(i-1):
        cur.append(pre[j]+pre[j+1])
        
    cur.append(1)
    tri.append(cur)
print(tri)
------------------------------------
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

#解法1优化2:容器的内容可以后面改变,地址并不改变;
list是不可变对象,添加到列表中之后,可以继续改变内嵌list,大列表中的小列表也会改变;
n = int(input('>>>'))
tri = []   # 

for i in range(n):  #[0,5]
    cur=[1]
    tri.append(cur)

    if i == 0: continue
        
    pre = tri[i-1]   
    for j in range(i-1):   # range(0)不进去循环;
        cur.append(pre[j]+pre[j+1])
        
    cur.append(1)
print(tri)
-------------------------------------------------------
>>>6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
 
# 解法2:补0法(两头补零,右边补零);  负索引的使用
效率低,增加了计算,copy的次数
n = int(input('>>>'))
tri = [[1]]   # 0,1

for i in range(1,n):  #[0,5]
    pre = tri[i-1] + [0]   # 前面的2行
    cur=[]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
    for j in range(i+1):
        cur.append(pre[j-1] + pre[j])    # 负索引不影响;
                   
    tri.append(cur)
print(tri)



总结:
1.索引怎么算?一步一步算;      注意:负索引的使用;
2.效率不太高,两头的1都是加出来的,但思维方法值得学习;
3.变量名也要规范,从现在养成习惯;
4.清楚自己循环多少次的,建议用for循环;不知道多少次,用while;

相关文章

网友评论

    本文标题:9.2-杨辉三角基本解法和补零法

    本文链接:https://www.haomeiwen.com/subject/lvchsctx.html