直接使用递归的方法会导致TLE,加个缓存就好了:
public class Solution { private Integer[] buff = new Integer[1000]; /* * @param n: an integer * @return: an ineger f(n) */ public int fibonacci(int n) { if(buff[n]!=null) return buff[n]; else if(n==1) return buff[1] = 0; else if(n==2) return buff[2] = 1; else return buff[n] = fibonacci(n-1) + fibonacci(n-2); } }
或者使用迭代法:
public class Solution { /* * @param n: an integer * @return: an ineger f(n) */ public int fibonacci(int n) { if(n==1) return 0; else if(n==2) return 1; int a=0, b=1, c=a+b; n-=2; while(n-->0){ c = a + b; a = b; b = c; } return c; } }
题目来源: http://www.lintcode.com/zh-cn/problem/fibonacci/
时间: 2024-10-15 07:52:08