写一个函数,输入 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
}
网友评论