假設你正在爬樓梯。需要 n 階你才能到達樓頂。n=1:一級台階,只有1種方法每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是乙個正整數。
n=2:兩級台階,可以一級一級爬,也可以一次爬兩級,2種方法
n=3:一級一級、第一次爬兩級,後一級、第一次一級,後兩級,共三種方法
以此類推可以得到公式:fn=fn-1+fn-2
(我們可以倒著從頂往下看:第n級台階,可以是從第n-1級開始爬一級或者從第n-2級爬2級)
會重複計算:
// 遞迴
public
intclimbstairs
(int n)
return
climbstairs
(n -1)
+climbstairs
(n -2)
;}
(兩種形式的**)
// 記憶化遞迴1
public
intclimbstairs2
(int n)
public
intmemory
(int n,
int[
] memo)
if(n <=2)
else
return memo[n]
;}
// 記憶化遞迴2
int[
] dp;
public
intclimbstairs3
(int n)
public
intdfs
(int n,
int level)
if(dp[level]!=0
)else
return dp[level]
;}
// 動態規劃
public
intclimbstairs4
(int n)
int[
] dp =
newint
[n];
dp[1]
=1; dp[2]
=2;for
(int i =
3; i <= n; i++
)return dp[n]
;}
// fibonacci
public
intclimbstairs5
(int n)
int a =
1, b =
2, count =3;
while
(count <= n)
return b;
}// fibonacci2
public
intclimbstairs6
(int n)
return c;
}
end. LeetCode 70 爬樓梯 簡單
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...
leetcode70題 爬樓梯
每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 2 階示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。3.1 階 1 階 1 階 4.1 階 2 階 5.2 階...
leetcode 70 爬樓梯 go實現
package main import fmt func main 斐波那契數列 前乙個數等於前兩個數之和 可以想,走到第i級台階有幾種方法呢,2種。1.從i 1級走一步到n級 2.從i 2級走兩步到n級 那也就是說,走到第i級台階的走法有f i f i 1 f i 2 也就是用第i 1級台階的走法...