class Solution {
//自底向上
public int fib(int n) {
if(n <= 1) {
return n;
}
int a = 0;//a代表f(0)
int b = 1;//b代表f(1)
int c = 0;
for(int i = 2; i <= n; i++) {
//计算c
c = (a + b) % 1000000007;
//a b 往后走
a = b;
b = c;
}
return c;
}
}
class Solution {
public int fib(int n) {
//动态规划递推,递归的方法时间复杂度太高
if(n == 0 || n == 1){
return n;
}
int f1 = 0, f2 = 1;
int sum = 0;
for(int i = 2; i <= n; i++){
sum = (f1 + f2) % 1000000007;
f1 = f2;
f2 = sum;
}
return sum;
}
}
class Solution {
public int fib(int n) {
if (n < 2) return n;
int a = 0, b = 1;
while (n-- > 1) {
int t = a;
a = b;
b += t;
if (b >= 1000000007) b -= 1000000007;
}
return b;
}
}
时间复杂度:O(n), 空间复杂度:O(1)
class Solution(object):
class Solution(object):
def fib(self, n):
"""
:type n: int
:rtype: int
"""
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a%1000000007
class Solution {
public int fib(int n) {
int a = 0, b = 1, sum;
for(int i = 0; i < n; i++) {
sum = (a + b) % 1000000007;
a = b;
b = sum;
}
return a;
}
}
class Solution {
public int fib(int n) {
if (n <= 1) return n;
int MOD = (int)1e9 + 7;
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2;i <= n;i++) {
dp[i] = (dp[i-1]+dp[i-2]) % MOD;
}
return dp[n];
}
}
优化,空间复杂度O(1)
class Solution {
public int fib(int n) {
if (n <= 1) return n;
int MOD = (int)1e9 + 7;
int a = 1,b = 0;
for (int i = 2;i <= n;i++) {
a = a + b;
b = a - b;
a %= MOD;
}
return a;
}
}
// 动态规划
// 时间复杂度O(n),空间复杂度O(1)
class Solution {
public int fib(int n) {
if (n <= 1) {
return n;
}
int a = 0, b = 1, c = 0;
for (int i = 2; i <= n; i++) {
c = (a + b) % 1000000007;
a = b;
b = c;
}
return c;
}
}
class Solution {
public:
int fib(int n) {// 使用动态规划,注意要对1e9+7取余
if(n<2) return n;
int p=0,q=0,r=1;
int mod = 1000000007;
for(int i = 2; i <= n; i++){
p = q;
q = r;
r = (p+q)%mod;
}
return r;
}
};
class Solution {
public int fib(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
int a = 0,b = 1;
int c = 0;
for(int i = 2;i <= n;i++){
c = (a + b)%1000000007;
a = b;
b = c;
}
return c;
}
}
共以下 15 个回答
时间复杂度: O(n) 空间复杂度O(1)
注意取模的问题
迭代
利用矩阵,需要注意取模精度
下面代码
时间:O(n)
动规
时间复杂度O(N)空间复杂度O(N)
优化,空间复杂度O(1)
时间复杂度O(n),空间复杂度O(1)