剑指Offer--跳台阶

版权声明:版权所有,转载请注明出处。 https://blog.csdn.net/pdfcxc/article/details/84350856

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解题思路:

n级台阶,假设有f(n)中跳法,第一步可以选择跳1级,则剩下(n-1)级台阶,(n-1)级台阶的跳法有f(n-1)种;如果第一步选择跳2级,则剩下(n-2)级台阶,(n-2)级台阶对的跳法有(n-2)种,所以n级台阶的跳法相当于(n-1)级台阶的跳法加上(n-2)级台阶的跳法,即f(n)=f(n-1)+f(n-2),剩下的可以以此类推。

我来再来考虑n小于等于0、n为1、n为2的情况。如果n<=0的话直接返回0。如果只有1阶台阶,则只有一种跳法,如果有2级台阶,则有两次跳法(第一种:每次跳一级,第二种:一次跳2级)

public class Solution {
    public int JumpFloor(int target) {
        /*递归解法*/
        if(target<=0){
            return 0;
        }else if(target==1){
            return 1;
        }else if(target==2){
            return 2;
        }else{
            return JumpFloor(target-1)+JumpFloor(target-2);
        }
    }
}

上面的解法是递归解法,递归的优点是简单易懂、代码量少,但是当递归的层数比较大的时候,重复计算的数据比较多,而且容易出现内存溢出的风险。所以可以采用迭代的方法来进行优化

public class Solution {
    public int JumpFloor(int target) {
        /*迭代解法*/
        int zero=0;
        int one=1;
        int two=2;
        if(target<=0){
            return zero;
        }else if(target==1){
            return one;
        }else if(target==2){
            return two;
        }else{
            for(int i=2;i<target;i++){
                zero=one+two;
                one=two;
                two=zero;
            }
            return zero;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/pdfcxc/article/details/84350856