跳台阶

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

分情况讨论:当n=1 ,n=2 ,n>=2

当n>=2时又从第一次开始讨论,第一次可以跳两步或者一步,剩下的就是f(n-1)或者f(n-2)步,这是两种不同的方案进行相加,就可以看出规律为斐波拉契数列。但是要注意的是初值为1而不是0,以及台阶和index的关系。

 resolution1:自底向上

 public int JumpFloor(int target) {
          int counts = 0;
        int[] countArray = new int[target];
        countArray[0] = 1;
        if(target>2 || target ==2){
            countArray[1] = 2;
            for(int i = 2;i < target; i++){
                countArray[i] = countArray[i-1] + countArray[i-2];
            }
            counts = countArray[target - 1];
        }else if(target == 1){
            counts = 1;
        }
        return counts;

    }

resolution:自顶向下

需要注意的是最后判断target>2时不能用while,否则就是一个死循环,应该直接用if,执行了判断语句之后就直接跳出循环,而while会一直判断,满足条件又会继续循环。

while与if语句的最大的相同点是都有至少一步的判断。
最大的不同点是:IF语句运行完毕后,接着运行下面的语句。而While中的执行语句运行完毕后,还要进行继续判断条件是否符合循环条件,根据判断的条件,返回执行语句或继续运行下面的程序。
 public int JumpFloor(int target) {
         int result = 0;
        if(target == 1)  result = 1;
        if(target == 2)  result =2 ;
        if(target >2 ){
            result = JumpFloor(target -1) + JumpFloor(target - 2);
        }
        return result;
    }

 

posted @ 2019-01-13 17:44  crr121  阅读(147)  评论(0编辑  收藏  举报