九度OJ1387 http://ac.jobdu.com/problem.php?pid=1387
剑指offer面试题9
思路分析
主要有两个要点:第一,加一个数组作为缓存,来减少重复计算次数,并且防止递归太多导致栈溢出;第二,注意计算结果不能是int型的,是long型的。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
private long fac(int n) {
// n的范围为[0, 70]
long[] dp = new long[71];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i < n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n - 1];
}
public static void main(String[] args) throws IOException {
Main M = new Main();
StreamTokenizer st = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
while (st.nextToken() != StreamTokenizer.TT_EOF) {
int n = (int)st.nval;
System.out.println(M.fac(n));
}
}
} // class
/**************************************************************
Problem: 1387
User: buptxxz
Language: Java
Result: Accepted
Time:70 ms
Memory:14640 kb
****************************************************************/