美文网首页Python全栈工程师
11.1-杨辉三角性质解法

11.1-杨辉三角性质解法

作者: BeautifulSoulpy | 来源:发表于2019-08-28 08:28 被阅读0次

自身有价值了,才会像吸铁石,朋友甚至以前的陌生人都愿意转身过来与你为伴,不要怪罪世界现实,让自己强大才是给自己最好的安全感!

真正想要的东西,
不只是踮踮脚尖那么简单,
所有的收获,一定要全力以赴,奋不顾身!

算法里面最经典的题目:(必须掌握*****)质数、杨辉三角、矩阵

列表在Python中是最重要的数据结构,数组在Java中也是最重要的数据结构;

面试题其实就是问你在这些基础解法上有优化策略没有(进行改进,变换)
算法中玩的就是这些东西;所以我们必须学到极致;

练习1.求杨辉三角的第m行的第n个元素:

杨慧三角性质:
1.第m行有m项,m为正整数,因此K一定不会大于m;
2.第N行的m个数可以表示为C(n-1,m-1),即从n-1个不同的元素中取m-1个元素的组合数;

#方法1:基本解法
最朴素的想法:下一行依赖于上一行所有元素,是上一行所有元素相加的和,再在两头各加1;
m = 6
n = 4

tri = []
for i in range(m):
    row = [1]
    tri.append(row)
    if i == 0: continue
    
    for j in range(i-1):
        row.append(tri[i-1][j] + tri[i-1][j+1])
    row.append(1)
print(tri)
----------------------------------------------------------------------
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]


#方法2:一次开辟内存空间比 append方法速度要快
在不引起垃圾回收的情况下,方法2比1要好;效率与工资挂钩;

m = 6
n = 4

oldline = []
for i in range(m):
    newline = [1] * (i+1)
    
    for j in range(i-1):
        newline[j+1] = oldline[j] + oldline[j+1]
   
    # for j
    oldline = newline
    print(newline)
----------------------------------------------------
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

组合数公式 ( 最快的方法)

从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。
公 式 C(n,m)=n!/((n-m)!*m!)(m≤n)
性质1 C(n,m)= C(n,n-m)
性质2 C(n,m)=C(n-1,m-1)+C(n-1,m)

# 方法3:性质2:阶乘思想n!/(r! * d!)
m = 6
k = 4

n = m-1
r = k-1
d = m-k

fact = 1
targets = []  # r,d, n n!/(r! * d!)
for i in range(1,n+1):
    fact *= i
    if r == i:     # 控制语句与单分支控制意义不同;’
        targets.append(fact)
    if d == i:
        targets.append(fact)
    if n == i:
        targets.append(fact)
print(targets[2] // (targets[0] * targets[1]))
----------------------------------------------------------------------------------
10
本节总结:
  1. 计算机中,加法、乘法算的非常快的,效率极高;
  2. %%timeit 测试的时候所有的print语句都要去掉;
  3. 多行控制语句与单分支控制意义是不同的,存在多个条件时,单行会少考虑条件相等时进入分支的次数;

相关文章

  • 11.1-杨辉三角性质解法

    自身有价值了,才会像吸铁石,朋友甚至以前的陌生人都愿意转身过来与你为伴,不要怪罪世界现实,让自己强大才是给自己最好...

  • 杨辉三角

    杨辉三角的性质:每个数等于它上方两数之和 思路:根据上述杨辉三角性质,新的行,是根据上一行的值两两相加得来, 为了...

  • 21个GIF动图让你了解各种数学概念

    1、椭圆的画法 2、杨辉三角问题(Pascal triangles)解法 3、使用“FOIL”轻松的解决二项式乘法...

  • 杨辉三角的几种解法(python)

    1. 计算杨辉三角,普通法 2. 计算杨辉三角 补0法 3. 杨辉三角,对称法 中点的确定:[1][1,1][1,...

  • LeetCode 力扣 118. 杨辉三角

    题目描述(简单难度) 其实就是杨辉三角,当前元素等于上一层的两个元素的和。 解法一 用两层循环,注意一下我们下标是...

  • 杨辉三角的六种解法

    1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 的三角形,其实质是二项式(a+b)的n次方展开后各项的...

  • 51、质数和杨辉三角多种解法

    真正想要的东西,不只是踮踮脚尖那么简单,所有的收获,一定要全力以赴,奋不顾身! 现在的怕和愁,都是能力小和经历少;...

  • Python解决杨辉三角问题

    最近在学习Python,在看廖雪峰老师的博客的时候,其中一个练习题为杨辉三角问题,发现了一种很优雅的解法,现记录如...

  • 9.3-杨辉三角对称解法和单行列表解法

    人世间的东西,一半是不值得争的,一半是不需要争的。我们真正所要追求的,并不在于比别人拥有更多的财富、或者比别人优秀...

  • 21天C语言代码训练营(第三天)

    上一篇最后留了一个打印杨辉三角的问题。这是C语言程序设计练习题中比较常见的一道题,今天我们将通过多种解法帮助大家熟...

网友评论

    本文标题:11.1-杨辉三角性质解法

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