leetcode Climbing Stairs

来源:互联网 发布:大数据需要数据库吗 编辑:程序博客网 时间:2024/06/07 12:02

给定一个n阶数的梯子,每步可以跨1或者2阶,问最终上去的不同方法:

分析:

当阶数n=1,只有1种方法;

当阶数n=2,有两种方法;

当阶数n=3,其方法种数等于n=2的种数(剩下的1阶一步即可到达),再加上n=1的种树(剩下的2阶明显可以到达);

当阶数n,其方法种数等于n-2的种数(剩下的2阶一步即可到达),再加上n11的种树(剩下的1阶明显可以到达);

很容易知道是递归:

int climbStairs(int n) { if(n==1)return 1; if(n==2)return 2; return climbStairs(n-1)+climbStairs(n-2);}

提交后超时,这是递归的缺点所在,改为动态规划:

    int climbStairs1(int n) {        vector<int> a(n+1);        a[0]=a[1]=1;        int i;        for(i=2;i<=n;i++)        a[i]=a[i-1]+a[i-2];    return a[n]; }


0 0
原创粉丝点击