m1n9yu3-博客园

python学习_012

今天到 好久不上的网站 领扣 看了一下
网站大变样 界面更加美观了 还新增了各种模式
然后我就想刷一下题目 试一下

杨辉三角

c语言的时候,使用 二维数组 两边填充 1 来解决的

杨辉三角的规律特别好摸
每一行的数 等于 上一行的数 + 上一行的数的前一个
每一行的 结尾 开头 都是 1

def  yhsj(n):  #定义一个函数 模块化功能 这个名字,随便起的
    x=[1]        
    for i in range(n):
        print(x)
        x.append(1) 
        for j in range(1,int(len(x)/2)):
            x[j]=x[j]+x[j-1]
yhsj(6)
#整体思路就是利用两个列表 按照规律 推演出 下一行的数 

居然还有排名

肯定是大佬都不愿意做这样的题目,要么就是不喜欢用 python 嘿嘿 捡便宜了 这个 第 768 题

斐波那契数列

从0 开始 前一个数 + 后一个数 = 下一个数
0 1 1 2 3 5 8 13 21 34 55 89
就挺好办的

方法一

class Solution:
    """
    @param n: an integer
    @return: an ineger f(n)
    """
    def fibonacci(self, n):
        # write your code here
        x=0
        y=1      
        for i in range(1,n):
            x,y=x+y,x    # 限定范围 交换数据  python 语法简单 爱了爱了
        return x

a1=Solution()  #创建对象
a1.fibonacci(2)  #调用成员函数

方法二

斐波那契数列 被推导出公式了 虽然我看不懂推导过程 但是我可以拿过来用啊

# 斐波那契数列通用公式1
import math
class Solution:
    """
    @param n: an integer
    @return: an ineger f(n)
    """
    def fibonacci(self, n):
        x1=5**0.5    #类似于 math.sqrt(5)  开方
        n=n-1
        x=1/x1*(((1+x1)*0.5)**n-((1-x1)*0.5)**n)
        return int(x)

a1=Solution()
a1.fibonacci(10)

最后这个算法 时间复杂度为 O(1) 但是却没有 方法一 的评分高 有点伤
还有就是 只能算到 1000 个 当算 10000 个的时候,会溢出

posted @ 2020-06-12 20:01  m1n9yu3  阅读(122)  评论(0编辑  收藏  举报