class Solution {
private:
unordered_map<int,bool> hash_map;
public:
int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return (fib(n-1)%1000000007+fib(n-2)%1000000007)%1000000007;
}
};
递归求解本身没有问题,但是存在大量重复计算,当数字较大时会导致超时。
改用动态规划方式
class Solution {
public:
int fib(int n) {
if (n<=1){return n;}
int dp[n+1];
dp[0]=0; dp[1]=1;
for (int i=2; i<=n; i++){
dp[i] = (dp[i-1]%1000000007 + dp[i-2]%1000000007)%1000000007;
}
return dp[n];
}
};