異常なジャンプ階段
説明タイトル
カエル、それはであるn段よい......一つはジャンプをジャンプすることができるステージ1、ステージ2をジャンプできる手順。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました。
思路:F(N)= F(N-1)+ F(N-2)+ F(N-3)+ ... + 1。
F(N-1)= F(N-2)+ F(N-3)+ F(N-4)+ ... + 1。
(N-1)(N)= 2F fの二つの式を減じました
F(1)= 1。
したがって、F(N)= 2 ^ n個
public class Solution {
public int JumpFloorII(int target) {
int a=1;
if(target==1)
return 1;
else
for(int i=1;i<target;i++){
a=a*2;
}
return a;
}
}
太行8、そのブラシは、より多くの質問がコードに個々のアイデアを行使することができないので、実際には、上記の式の方法に比べて私は、達成するための簡単なコードを好みます
import java.util.*;
public class Solution {
public int JumpFloorII(int target) {
if (target <= 2) {
return target;
}
int[] dp = new int[target + 1];
Arrays.fill(dp, 1); //初始化每一种都可以直接从 0 跳到 n
dp[0] = 0; //从 0 跳到 0 为 0 种,因为 n = 0,没法跳
for (int i = 2; i <= target; i++) {
for (int j = i - 1; j >= 1; j--) {
dp[i] += dp[j]; //第 n 个状态是由前 n - 1 种状态推导出来,就是累加!
}
}
return dp[target];
}
}
これは、(N)Fそれ直接= F(N-1)+ F(N-2)+ ... F(1)+1コード実装であります
import java.util.*;
public class Solution {
public int JumpFloorII(int target) {
if(target<=2)
return target;
else{
int [] arr=new int[target+1];
Arrays.fill(arr,0);
arr[0]=0;
arr[1]=1;
for(int i=2;i<=target;i++){
for(int j=i-1;j>=1;j--)
{
arr[i]=arr[j]+arr[i];
}
arr[i]=arr[i]+1;
}
return arr[target];
}
}
}
次に、私はこれをf(N)= F(N-1)+ F(N-2)であると考え変更+ ... +以前のバージョンの1つの直接的な実装は、直接ではありません