爬楼梯是一道经典的动态规划问题,问题描述如下:有n个台阶,每次可以爬1个或2个台阶,问爬到第n个台阶有多少种不同的爬法。
我们可以用动态规划的思想来解决这个问题,用一个数组dp[]来表示每个位置上的爬法总数,其中dp[i]表示到第i个台阶的爬法总数。
动态规划的转移方程为:dp[i] = dp[i-1] + dp[i-2],其中dp[i-1]表示从第i-1个台阶到第i个台阶只需爬1个台阶的方案数,dp[i-2]表示从第i-2个台阶到第i个台阶需要爬2个台阶的方案数。
Java代码实现如下:
public class ClimbStairs {
public int climbStairs(int n) {
if (n <= 2) {
return n;
}
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
在这个实现中,我们首先判断n是否小于等于2,如果是,直接返回n。然后创建一个长度为n+1的数组dp,初始化dp[1]=1,dp[2]=2,然后根据动态规划的转移方程dp[i] = dp[i-1] + dp[i-2],计算出dp[n]的值并返回。