LeetCodeの第70タイトル:階段(シンプル)
- タイトル:あなたは階段を登っていると仮定します。あなたが屋根に取得する必要がNの順。たびに、1つまたは2つのステップを登ることができます。どのように多くの異なる方法がそれの屋根に登ることができますか?注:与えられたnは正の整数です。
- 思考:フィボナッチボリュームシリーズは、問題を解決するために再帰を使用したいと思います。しかし、時間制限を超えました。
class Solution {
public int climbStairs(int n) {
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return climbStairs(n-1)+climbStairs(n-2);
}
}
}
- 2思考:すべての再帰的ステップの冗長があり、ストレージの配列を使用する方法を考えます。
class Solution {
public int climbStairs(int n) {
int ans[] = new int[n];
if(n==1) return 1;
ans[0]=1;
ans[1]=2;
for(int i=2;i<n;i++){
ans[i]=ans[i-1]+ans[i-2];
}
return ans[n-1];
}
}
- 3思考:メソッドの種類を直接フィボナッチ数の計算式を求める公式で与えられ、実際には、私は非常に退屈な感じ。。。
public class Solution {
public int climbStairs(int n) {
double sqrt5=Math.sqrt(5);
double fibn=Math.pow((1+sqrt5)/2,n+1)-Math.pow((1-sqrt5)/2,n+1);
return (int)(fibn/sqrt5);
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/climbing-stairs/solution/pa-lou-ti-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。