70. Climbing Stairs
給出一個樓梯階數,每次只能走一階或兩階,求所有的走法
比較笨的方法
類似雞兔同籠問題,設定oneStepCount和twoStepCount兩個變數,然後利用排列累加,但是需要注意求階乘的時候溢位的問題
斐波那契數列
當n=1,2,3,4,5,6,7
時,可以得到結果1, 2, 3, 5, 8, 13, 21
,顯然這是一個斐波那契數列(但我竟然沒看出來。。),用遞迴或非遞迴方法都可以解
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int x = 3, result = 0, a = 1, b = 2;
while (x <= n) {
result = a + b;
a = b;
b = result;
x++;
}
return result;
}
一個另類的解法
觀察這個結果,可以發現另一種規律,假設result[n]存放結果,下標從1開始n = 4
時,結果可以寫成result[4 - 1] * 2 - result[4 - 3]
,即3 * 2 - 1
n = 5
時,結果可以寫成result[5 - 1] * 2 - result[5 - 3]
,即5 * 2 - 2
依次類推,大膽的猜這個數列的遞推式為result[n] = result[n - 1] * 2 - result[n - 3]
但是需要注意處理n = 1, 2, 3
時的情況
public int climbStairs(int n) {
int[] temp = new int[n];
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
if (n == 3) {
return 3;
}
temp[0] = 1; temp[1] = 2; temp[2] = 3;
int x = 3;
while (x < n) {
temp[x] = temp[x-1] * 2 - temp[x - 3];
x++;
}
return temp[n-1];
}
相關文章
- Leetcode-Easy 70. Climbing StairsLeetCodeAI
- Climbing StairsAI
- Leetcode Climbing StairsLeetCodeAI
- 746. Min Cost Climbing StairsAI
- Leetcode-Climbing StairsLeetCodeAI
- Climbing Stairs leetcode javaAILeetCodeJava
- 爬樓梯(LintCode Climbing Stairs)AI
- Climbing Stairs 爬樓梯問題,每次可以走1或2步,爬上n層樓梯總方法 (變相fibonacci)AI
- [CareerCup] 9.1 Climbing Staircase 爬樓梯AI
- 程式碼隨想錄演算法訓練營 | 動態規劃,509. 斐波那契數,70. 爬樓梯, 746. 使用最小花費爬樓梯演算法動態規劃
- 程式碼隨想錄演算法訓練營第三十八天 | 746. 使用最小花費爬樓梯,、70. 爬樓梯,509. 斐波那契數演算法
- 程式碼隨想錄演算法訓練營第35天 | 動態規劃1:509.斐波那契數、70.爬樓梯、746.使用最小花費爬樓梯演算法動態規劃
- 38天【程式碼隨想錄演算法訓練營34期】第九章 動態規劃part01 (● 理論基礎 ● 509. 斐波那契數 ● 70. 爬樓梯 ● 746. 使用最小花費爬樓梯)演算法動態規劃