class Solution {
public int numWays(int n) {
//动态规划递推,递归的方法时间复杂度太高
if(n == 0 || n == 1){
return 1;
}
int f1 = 1, 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 numWays(int n) {
if (n < 2) return 1;
int a = 1, 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):
def numWays(self, n):
"""
:type n: int
:rtype: int
"""
a, b = 1, 1
for i in range(n):
a , b = b, a+b
return a%1000000007
class Solution {
public int numWays(int n) {
int a = 1, b = 2, sum;
for(int i = 1; i < n; i++) {
sum = (a + b) % 1000000007;
a = b;
b = sum;
}
return a;
}
}
class Solution {
public int numWays(int n) {
if (n == 0)return 1;
if (n <= 2) return n;
int MOD = (int)1e9 + 7;
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for(int i = 3 ;i <= n;i++) {
dp[i] = (dp[i-1] + dp[i - 2]) % MOD;
}
return dp[n];
}
}
优化
class Solution {
public int numWays(int n) {
if (n == 0)return 1;
if (n <= 2) return n;
int MOD = (int)1e9 + 7;
int a = 1,b = 1;
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 numWays(int n) {
if (n <= 1) {
return 1;
}
int a = 1, 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 numWays(int n) {
if(n == 0 ||n == 1) return 1;
int a = 1,b = 1;
int c = 0;
for(int i = 2;i <= n;i++){
c = (a + b)%1000000007;
a = b;
b = c;
}
return c;
}
}
class Solution {
static final int val = (int)(1e9+7);
public int numWays(int n) {
//dp动态规划法
if (n <= 1){
return 1;
}
int dp [] = new int[n+2];
dp[0] = 1;
dp[1] = 1;
for (int i = 2;i<=n;i++){
dp[i] = dp[i-1] %val +dp[i-2]%val;
}
return dp[n]%val;
}
}
共以下 11 个回答
n = 0的预期输出是1
同理斐波那契
下面代码
斐波那契同之前
优化
时间复杂度O(n),空间复杂度O(1)