题解 | 跳台阶扩展问题
跳台阶扩展问题
https://www.nowcoder.com/practice/953b74ca5c4d44bb91f39ac4ddea0fee
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
System.out.println(run(n));
}
public static int run(int n){
// 边界条件
if (n == 0) return 0; // 如果n为0,返回0
if (n == 1) return 1; // 如果n为1,返回1
if (n == 2) return 2; // 如果n为2,返回2
if (n == 3) return 4; // 如果n为3,返回4
// 创建dp数组,长度为n+1
int[] dp = new int[n + 1];
// 初始化dp数组
dp[0] = 0; // 0步有0种方法
dp[1] = 1; // 1步有1种方法
dp[2] = 2; // 2步有2种方法
dp[3] = 4; // 3步有4种方法
// 动态规划计算 为2的等比数列
for (int i = 4; i <= n; i++) {
dp[i] = dp[i - 1]*2; // 状态转移方程
}
return dp[n]; // 返回结果
}
}

