乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。
示例 1:輸入:n = 2 輸出:2
示例 2:輸入:n = 7 輸出:21
class solution
public int dfs(int n, int level) else else
} }}
更新:新增幾種解決的方法
第一種: 遞迴(但會重複計算),時間複雜度高,會超時,適用於小數範圍
public int climbstairs(int n)
return climbstairs(n - 1) + climbstairs(n - 2) ;
}
第二種:記憶化遞迴(解決重複計算)
public int climbstairs2(int n)
public int memory(int n, int memo)
if (n <= 2) else
return memo[n];
}
另一種版本
(跟最上面的方法差不多的步驟,此處的更簡潔明瞭)
// 記憶化遞迴2
int dp;
public int climbstairs3(int n)
public int dfs(int n, int level)
if (dp[level] != -1) else
return dp[level];
}
第三種:動態規劃
// 動態規劃
public int climbstairs3(int n)
int dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++)
return dp[n];
}
第四種:fibonacci數列(迭代)
// fibonacci
public int climbstairs5(int n)
int a = 1, b = 2, count = 0;
while (count <= n)
return b;
}
另一種版本:
// fibonacci2
public int climbstairs6(int n)
return c;
}
還有方法,不再贅述。 leetcode刷題(58) 70 爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 2 階示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1 階 1 ...
LeetCode刷題 70 爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...
leetcode刷題 70爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。最開始使用的是回溯的方法,但是時間效率地下沒有通過,於是想到了動態規劃的演算法。對於i樓梯,到達其的方法有從i 1跨一步和i 2跨兩步,因此到底i的方法就...