题目
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例
比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法,返回 3
分析:
典型的动态规划问题。
我们假设到达第n级台阶的方法数为f(n),那么最后一步的时候,我们有两种选择,一是选择爬一步,那么这时候的方法数就是f(n-1),另一种选择是选择爬两步,方法数f(n-2).所以通过这个我们就可以得出f(n)的状态转移方程:
f(n)=f(n-1)+f(n-2)
显然看到这里,我们可以利用递归求解这个问题。
package leetcode;
public class n8upStairs {
public static void main(String[] args) {
int n=5;
System.out.println(fun(n));
int [] a=new int[n+1];
System.out.println(fun2(a,n));
}
//递归求解
public static int fun(int n){
if(n==0||n==1){
return 1;
}
return fun(n-1)+fun(n-2);
}
//动态方程求解
public static int fun2(int[] a,int n){
if(n==1||n==0){
return 1;
}
a[0]=1;
a[1]=1;
for(int i=2;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
}