题目描述:
有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。
解题与代码:
package DP;
/**
* 爬楼梯
*/
public class _70_climbingStairs {
public static int climbStairs(int n){
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i < n+1; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
//优化
public static int climbStairs2(int n){
int pre = 1;
int cur = 1;
int ans = cur;
for (int i = 2; i < n+1; i++){
ans = pre + cur;
pre = cur;
cur = ans;
}
return ans;
}
// 递归
public static int climbStairs3(int n){
if (n < 2){
return 1;
}
return climbStairs3(n-1) + climbStairs3(n-2);
}
public static void main(String[] args) {
System.out.println(climbStairs3(3));
}
}