大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
斐波那契数列是一个满足 的数列
数据范围:
要求:空间复杂度 ,时间复杂度 ,本题也有时间复杂度 的解法
一个正整数n
输出一个正整数。
4
3
根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
1
1
2
1
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here res = 0 n1 = 1 n2 = 1 if n < 3: return 1 else : count = 2 res = 1 while count < n : res = n1+n2 n1 = n2 n2 = res count += 1 return res # return self.Fibonacci(n-1) + self.Fibonacci(n-2)
我们都知道,斐波那契数列的运行需要用到排序。以下是我的观点(Python 3,使用的是冒泡排序):
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): s = [] a = 1 b = 1 for x in range(39): s.append(a) a,b = b,a+b if n == 0: return 0 else: return s[n-1]
其中,因为 n<=39,所以我们只需要这个数列的前39项。核心代码是在第9行交换数据的部分。
在输入这里因为下标是从0开始,所以需要在返回值这里进行减1处理。
但是,如果输入0那么它的返回值就会成为-1(即,列表的最后一个元素(显示为63245986)),所以当输入值为0时返回值也必须是0才能保证代码的正确实现。
以上就是我的思路,如有疑问或错误,欢迎指正。
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here result=[0,1] if n<0&nbs***bsp;n>39: return False else: if n<=1: return result[n] else: for i in range(2,n+1): result.append(result[i-1]+result[i-2]) return result[n]
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here preNum = 1 prePreNum = 0 count = 2 result = 0 if n == 0 : return 0 if n == 1 : return 1 while count <= n : result = preNum + prePreNum prePreNum = preNum preNum = result count += 1 return result
class Solution: def Fibonacci(self,n): if n<=1: return n else: return self.Fibonacci(n-1)+self.Fibonacci(n-2)尝试提交,提示代码执行超时,毕竟递归调用复杂,那么不用递归要怎么写,我可不可以定义一个列表,让每次执行完之后,把执行得到的值append进列表里,这样下一次用的时候就不用去计算,可以直接拿来用,这样永远计算的就是LIST[n-1]+LIST[n-2],如下:
class Solution: def Fibonacci(self,n): if n<=1: return n else: lis=[0,1] i=2 while i<=n: lis.append(lis[i-1]+lis[i-2]) i+=1 return lis[n]
方法一: # -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here if n == 0: return 0 if n == 1: return 1 else: a_n_1, a_n_2 = 1, 0 for i in range(1, n): a_n = a_n_1 + a_n_2 a_n_1, a_n_2 = a_n, a_n_1 return a_n 方法二: # -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here num_list = [0,1] if n<2: return num_list[n] for i in range(2, n+1): num_list.append(num_list[-1]+num_list[-2]) return num_list[n]