LintCode Python 入門級題目 斐波納契數列
阿新 • • 發佈:2017-06-01
ima 算法 app mage 個數字 img ... 分享 spa
原題描述:
查找斐波納契數列中第 N 個數。
所謂的斐波納契數列是指:
- 前2個數是 0 和 1 。
- 第 i 個數是第 i-1 個數和第i-2 個數的和。
斐波納契數列的前10個數字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
題目分析:
開始的想法,通過遞歸實現輸出fib(n-1)+fib(n-2)的值計算,原理正確,算法復雜度高,導致運行時間超過lintcode限制:
class Solution: # @param n: an integer # @return an integer f(n) # 遞歸實現 def fibonacci(self, n): if n == 1: return 0 elif n == 2: return 1 else: return self.fibonacci(n-1) + self.fibonacci(n-2)
修改為叠代實現,將斐波納契數保存到列表中,循環n-2次,每次將數列最後一個元素[-1]和倒數第二個元素[-2]相加並追加到列表中,最終返回列表最後一個元素~
class Solution: # @param n: an integer # @return an integer f(n) # 通過for循環叠代實現 def fibonacci(self, n): num = [0,1] if n == 1: return 0 elif n ==1: return 1 for i in range(0,n-2): num.append(num[-1] + num[-2]) return num[-1]
LintCode Python 入門級題目 斐波納契數列