文章标题

来源:互联网 发布:linux修改path 编辑:程序博客网 时间:2024/05/09 12:07

/**
* 题目

假设你正在爬楼梯,需要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];    }}
0 0