首页 > 其他 > 详细

给出一个帕斯卡三角的行数,返回该行元素,要求复杂度为K(O)

时间:2021-09-09 04:12:18      阅读:60      评论:0      收藏:0      [点我收藏+]

这道题让我深深感觉数学才是算法的核心,不对,是爸爸。

 

简单说下题目,帕斯卡三角,如下图,从第三行开始,除了两边的1,其他元素都是上一行两个左右元素之后,比如第三行的中间的2,就是上面两个1之和。

如果第一行为0行,那么给出行数,返回该行所有元素,比如给出3,返回[1,3,3,1]

关于帕斯卡三角,还是很多有趣属性,可以搜索,最主要就是和二项式展开系数的关系。

技术分享图片

 

如果不考虑算法复杂度,其实只要从第一行开始一行一行算下来即可,这样无论如何就要两次循环嵌套,复杂度是K(O^2)。

如果要K(O)一次循环的复杂度,就要思考下数学联系了,后面实在想不出搜索下。发现关系如下:

                                    即第n行第i个(n,i 从 0 开始)是C(i,n),组合计算公式:

                                     技术分享图片

                                    化简得 : C(i,n) = n * ( n -1) * ... * ( n - i +1) / ( 1 * 2 * ... * i )

 

惭愧,我的代码基本就是他的python版本。

可能稍微优化地方是,这里先创建了一个行数加以长度的0值队列,这个也是帕斯卡三角的属性,每一行的元素数是行数加一;因为帕斯卡三角元素是前后对称,每次就计算前面一个,同时更新前后对称两个;当队列所有元素不为0时候,返回该队列即是答案。这样就只用遍历一半即可。

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
    def getRow(self, rowIndex: int-List[int]:
        rowList = [0 for in range(rowIndex+1)]
        = 1
        for in range(len(rowList)): 
            if == 0:
                rowList[0=1 
                rowList[rowIndex] = 1
            elif rowList[i] != 0:
                return rowList
            else:
                = int(m*(rowIndex-i+1)/i)
                rowList[i] = m
                rowList[rowIndex - i] = m
        return rowList

给出一个帕斯卡三角的行数,返回该行元素,要求复杂度为K(O)

原文:https://www.cnblogs.com/chenguopa/p/15239865.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!