每天两道编程题---剑指offer(9):跳台阶问题

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路:

我没有找到用显式递归解决该问题的方法,只是在解题过程中用到了递归的思想。

显而易见,n=1时只有一种方法。当n>=2时,可以分情况讨论青蛙跳的级数。若第一次跳1级,问题就变成了求青蛙跳n-1级有多少种方法;若第一次跳2级,问题就变成了求青蛙跳n-2级有多少种方法......依此类推,问题就分解成了一个求和问题。令M(n)是青蛙跳n级的方法,则M(n) = M(n-1) + M(n-2) + ......+ M(2) + M(1) + 1,这里最后加1是因为可以一下跳完n级。等式右边的式子实际上是多重递归,计算机会完成中间的复杂计算。

附上代码:

public class Solution {
    public int JumpFloorII(int target) {
        if(target == 1){
            return 1;
        }
        if(target == 2){
            return 2;
        }
        if(target >= 3){
            int total = 1;
            for(int i=1;i<target;i++){
                total += JumpFloorII(i);
            }
            return total;
        }
        return 0;
    }
}

性能结果:

运行时间:18ms,占用内存:9284K

优秀解法:

利用数学归纳法进行M(n)的进一步推导,可以得到M(n) = 1 (n=0或1);2*M(n-1)(n>=2)。这样就可以直接用显示递归求解。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czj970203/article/details/79977218
文章标签: code exercise java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

每天两道编程题---剑指offer(9):跳台阶问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭