“`java
//for循环
class Solution {
public int fib(int n) {
if (n <= 1) {
return n;
}
int n1 = 0;
int n2 = 1;
int mod = 1000000007;
for (int i = 2; i <= n; i++) {
int tmp = n2;
n2 = (n1 + n2)%mod;
n1 = tmp;
}
return n2;
}
}
class Solution {
public:
int fib(int n) {
if (n <= 1) {
return n;
}
int a = 0;
int b = 1;
int c = 0;;
for (int i = 2; i <= n; i++) {
c = (a + b) % 1000000007;
a = b;
b = c;
}
return c;
}
};
class Solution {
private static final int MOD = 1000000007;
public int fib(int n) {
int first = 0, second = 1;
for (int i = 2; i <= n; i++) {
int temp = (first + second) % MOD;
first = second;
second = temp;
}
return n > 0 ? second : first;
}
}
“`C++
public int fib(int n) {
if(n <= 1) return n;
int a = 0, b = 1;
int c = 2;
for(int i = 2; i <= n; i++) {
c = (a + b) % 1000000007;
a = b;
b = c;
}
return c;
}
```
public int fib(int n) {
if(n <= 1) return n;
int a = 0, b = 1;
int c = 2;
for(int i = 2; i <= n; i++) {
c = (a + b) % 1000000007;
a = b;
b = c;
}
return c;
}
共以下 11 个回答
“`java
//for循环
class Solution {
public int fib(int n) {
if (n <= 1) { return n; } int n1 = 0; int n2 = 1; int mod = 1000000007; for (int i = 2; i <= n; i++) { int tmp = n2; n2 = (n1 + n2)%mod; n1 = tmp; } return n2; } }
时间复杂度:O(n)
空间复杂度:O(1)
时间O(n)
c++实现
int fib(int n) {
int MOD = 1000000007;
if(n<2)return n;
int p = 0,q=0,r=1;
for(int i = 2;i<=n;i++)
{
p = q;
q= r;
r= (p+q)%MOD;
}
return r;
时间复杂度O(n)
可优化
动态规划
时间:O(n)
空间:O(1)
C++实现
“`C++
public int fib(int n) {
if(n <= 1) return n; int a = 0, b = 1; int c = 2; for(int i = 2; i <= n; i++) { c = (a + b) % 1000000007; a = b; b = c; } return c; } ```
防止溢出,赋值c前先取余