階段を上る階段を上っている
と思います。建物の最上部に到達するには、nステップかかります。
一度に1つまたは2つの階段を上ることができます。建物の最上部に登る方法はいくつありますか?
注:指定されたnは正の整数です。
例1:
入力:2
出力:2
説明:建物の上部に登る方法は2つあります。
- Tier 1 + Tier 1
- 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];
}