剑指 Offer 10- I. 斐波那契数列
本题如果用递归做,超时。注意要对结果取余。递归+记忆可以通过。如下:
1 class Solution { 2 int[] arr=new int[101]; 3 {//这里不加大括号会报错 4 Arrays.fill(arr,-1); 5 } 6 public int fib(int n) { 7 if(n<=1) 8 return n; 9 if(arr[n] != -1){ 10 return arr[n]; 11 }else{ 12 13 arr[n] = fib(n-1) + fib(n-2); 14 arr[n]=arr[n]% 1000000007; 15 return arr[n]; 16 17 } 18 } 19 20 21 }
本题其实还是动态规划的经典例子,看了半天背包问题没看懂,崩溃。但其实本题的迭代解还是很好理解的,可以优化到开一个n维数组,再可以优化到不开数组,因为只要取最后的结果,计算出最后结果的那些数其实不用记录下来(记下结果前的两个数即可):
class Solution { public int fib(int n) { if(n<=1) return n; int sum=0,a=0,b=1; for(int i=2;i<=n;i++){ sum=(a+b)%1000000007; a=b; b=sum; } return sum; } }

浙公网安备 33010602011771号