题解 | #斐波那契数列#

斐波那契数列

https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=295&tqId=23255&ru=/exam/intelligent&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Fintelligent

关于这道题,咱们就直接说说动态规划的解法,首先题目非常贴心给出了递推方程,所以得知n<3时,直接返回1就可以了这样就有了边界。

接下来讨论n>=3的情况,假设,所有斐波那契数列按从左到右一条直线排序,也即1、1、2、3、5、8、13....

由公式知道,前两个斐波那契数之和=第三个斐波那契数,如何求得第n个斐波那契数呢,就由题目中给出的递推方程来递推,假设a,b代表最初两个数,则c = a+b,也就是求得1,1,2, 接下来再求1,2,3. 我们可以观察到,自始自终只需要三个变量就够了,不需要数组去存储每一个斐波那契数,每次循环后,只需要做以下操作就可以

c = a + b
a, b = b, c

这段代码的意思就是说,当求得c以后,对于下一个数来说,a变成了b,b变成了c。具体可以这么理解,有个大小为3的窗口在

斐波那契数列上滑动,每次向右滑动一格,每次滑动后,窗口1、2、3的值都会更新(1,2,3对应代码a,b,c),由于最开始的值已经得知,所以对于第n个斐波那契数,只需要滑动n-2次

from re import A
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param n int整型 
# @return int整型
#
class Solution:
    def Fibonacci(self , n: int) -> int:
        # write code here
        if n < 3 :
            return 1
        a, b, c = 1, 1, 0

        for i in range(n-2):
            c = a + b
            a, b = b, c
        return c
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务