斐波那契数列-Swift

2020-05-23  本文已影响0人  等消息的人

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

代码

/**
     斐波那契数列:1,1,2,3,5,8,13,21,34.....时间复杂度O(n)
     */
    public func fib(_ N: Int) -> Int {
        var fibs: [Int : Int] = [0: 0, 1: 1, 2: 1]
        return fib(N, fibs: &fibs)
    }
    
    func fib(_ N: Int, fibs: inout [Int: Int]) -> Int {
        var result = 0
        if let fib = fibs[N] {
            return fib
        }
        
        result = fib(N - 1, fibs: &fibs) + fib(N - 2, fibs: &fibs)
        if result >= 1000000007 {
            result = result % 1000000007
        }
        fibs[N] = result
        
        return result
    }
上一篇下一篇

猜你喜欢

热点阅读