什麼是菲波那切數列?本身google一下,面試題裏面常常遇到,考試遞歸算法用的。面試
在菲波那切數列中用遞歸不太好。第三種算法最好。算法
第一 遞歸算法最差了,不想說。測試一下,當N=6000時,半天出不來數據,有想砸電腦的衝動。數組
第二 數組 在N變大後,空間浪費嚴重。測試
第三 隊列 最好 只使用2個隊列的空間,時間複雜度O(1) 常數級。google
class Solution { public int fib(int N) { if(N==1){ return 1; } if(N<=0){ return 0; } return fib(N-1)+fib(N-2); } }
class Solution { public int fib(int N) { if(N<=0){ return 0; } if(N<2){ return 1; } int[] nums=new int[N+1]; nums[0]=0; nums[1]=1; for(int i=2;i<N+1;i++){ nums[i]=nums[i-1]+nums[i-2]; } return nums[N]; } }
class Solution { public int fib(int N) { if(N<=0){ return 0; } if(N<2){ return 1; } Queue<Integer> queue=new LinkedList<>(); queue.offer(0); queue.offer(1); for(int i=2;i<N;i++){ queue.offer(queue.poll()+queue.peek()); } return queue.poll()+queue.poll(); } }