假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例
比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法
返回 3
解题思路:
动态规划。设dp(n)为爬到第n阶楼梯的方法数目,则
递推式为:dp(n) = dp(n-1) + dp(n-2)
递推出口:dp(0) = 0 ; dp(1) = 1 ; dp(2) = 2
public class Solution {
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int n) {
// write your code here
int[] dp = new int[n+1];
dp[0] = 0;//如果还有0步到达顶部,则有0种方法到达楼顶
if(n > 0)
dp[1] = 1;//如果还有1步到达顶部,则有1种方法到达楼顶
if(n > 1)
dp[2] = 2;//如果还有2步到达顶部,则有两种方法到达楼顶
//递推式
for(int i=3 ; i<=n ; i++)
dp[i] = dp[i-1] + dp[i-2];
return dp[n];
}
}