n阶台阶,每次可上1或2步,有一次机会可以在任意台阶上回退一步,也可选择放弃回退机会,到达顶端一共几种不同走法?
public class Main{
public static void main(String[] args) {
int res = goBack(5);
System.out.println(res);
}
public static int goBack(int n){
int[] dp = new int[n + 1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];//不回退的情况
}
int res=dp[n];
for(int i=1;i<n;i++){
res+=(dp[i]*dp[n-i+1]);//前n-1个台阶处回退,在i处回退,剩余(n-i+1)步
}
return res;
}
}