LeetCode:階段モデルにその行為フィボナッチ数列からの再帰的な思考の延長、

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_41885819/article/details/102700568

トピック説明:
あなたは階段を登っていると仮定します。Nは、あなたが屋根に取得する必要があります注文します。たびに、1つのまたは2つのステップを登ることができます。どのように多くの異なる方法がそれの屋根に登ることができますか?

私は実際に答えるように配置されたイデオロギーの組み合わせだと思うこの質問に対する最初の反応を参照してください。このようなn次のように、ステップ法によるステップを登る工程数が確かに、登山登山と最小ステップ数(N / 2 + N 2%されている ) の手順に必要なルール。nは(N / 2 + N 2% )ワンパスで2つの工程を工程数を増加させる手段還元プロセス、アルゴリズムは、構成の組み合わせです。例えば、10回のステップは、あなたがより高いレベルに2つの3段階と4段階の階段を必要とする、7つのステップに行くために、それは2,2,2,1,1,1,1抽象の組み合わせです。
あなたは再帰的な思考を使用する必要がある場合は、どのようにそれに答える必要がありますか?
この時点で、アイデアは小さなステップから、振り向くと、徐々に増加する必要があります。1のみステップ1移動する、2つの工程3つの段階で2つの移動三の移動があり、5つのステップ4に移動があります。もちろん、我々はすべてのは、おそらく引き出すためにペンと紙を使用して置くことができないが、一般的なリターンから、それはFを満たしているようだ(N)(N F個を= -1)+ F(N-2)、 その場合は法律は、それははるかに簡単な性質です。
私たちは、n個のxの知られているが、移動の種類、最後に移動するもの以上のものですその後、N + 1つのレベルを、ステップ、と考えることができますか?
まず、N N + 1つの段階のための移動の種類がまだであれば、最終的なことは、新たなレベルへの最後の上昇を意味し、一度により階段を登るために、唯一のn + 1番目を適用するステップをxは時間は、2つのステップを登るには?法律を登るのn-1段階のものの残りの部分は、ウェル(N-1)Fには思えるのに対し、n個と階段を登るのn + 1番目の時間です。確かに、私たちの推測を確認します。f(n)はF(= N-1)+ fは(N-2)。

package com.leetcode.recurse;

import java.util.HashMap;
import java.util.Map;

public class MemoizationStairs {
	Map<Integer, Integer> map = new HashMap<Integer, Integer>();
	public static void main(String[] args) {
		System.out.println(new MemoizationStairs().climbStairs(4));
	}
    public int climbStairs(int n) {
    		return getFactorial(n);
    }
    public int getFactorial(int n){
    	if(map.containsKey(n)) {
    		return map.get(n);
    	}
    	int result = 0;
    	if(n==1) {
    		result = 1;
    	}else if(n==2) {
    		result = 2;
    	}else {
    		//递归调用本身
    		result = getFactorial(n-1)+getFactorial(n-2);
    	}
    	map.put(n, result);
    	return result;
    }
    
}

このモデルは、実際にフィボナッチ数らしさであるF(N)= Fを満たす(N-1)+ F(N-2)が、列の数が設定されてF(0)= 0、F(1)= 1、 F(2)(0)+ F(1)= 1、我々はモデルの集合Fを必要階段F(1)= 1、F(2)= 2、F(3)= F(1)+ F(= 2)= 3。

おすすめ

転載: blog.csdn.net/qq_41885819/article/details/102700568