Leetcode動的計画クライミング階段問題1

階段を上る階段を上っている
と思います。建物の最上部に到達するには、nステップかかります。

一度に1つまたは2つの階段を上ることができます。建物の最上部に登る方法はいくつありますか?

注:指定されたnは正の整数です。

例1:

入力:2
出力:2
説明:建物の上部に登る方法は2つあります。

  1. Tier 1 + Tier 1
  2. 2次の
    例2:

入力:3
出力:3
説明:建物の上部に登る方法は3つあります。
3.レベル1 +レベル1 +レベル1
4.レベル1 +レベル2
5.レベル2 +レベル1

実際、この問題はフィボナッチ数列とほとんど同じです。動的プログラミングを使用している場合は、状態変化方程式、ボトムアップ計算、動的プログラミングのテンプレートを見つけてください

1:基本ケースを検索します。dp[i] = iがi番目のステップへの方法がiあることを意味する場合、
base [1] = 1
base [2] = 2
2 dorサイクルがテンプレートを適用し、if(i> = 3)
dp [i] = dp [i-1] + dp [i-2]がある
ため、動的プログラミングコードは次のように記述できます。

 //有多少种方式问题
    public static  int goUpstairs(int n)
    {
        //例外情况
        if(n<=0)
            return -1;
        //开辟数组记录前面的计算,以空间换时间
        int []dp = new int[n+1];

        for(int i=1;i<=n;i++)
        {
            //base case 为1 和 2
            if(i==1)
                dp[i] = 1;

            if(i==2)
                dp[i]=2;
            //
            if(i>=3)
                dp[i] = dp[i-1]+dp[i-2];
        }

        return dp[n];

    }
42件のオリジナル記事を公開 24 件を獲得 80,000回の閲覧

おすすめ

転載: blog.csdn.net/zhang245754954/article/details/105678229