剑指Offer之跳台阶

跳台阶

题目描述

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

解题思路

递归和循环的题,也可以简单的看为找规律的题
当只有一节台阶时:只有一种跳法

if(target==1) return 1;

当有两阶台阶时:有跳两次,一次一级和跳一次,一次两级两种跳法

if(target==2) return 2;

当有三阶台阶时:如果先跳了一阶,那么后边便是两阶再跳一次:1,1,1;1,2(两种)
 如果先跳了两阶,那么后边便是再跳一次一阶:2,1(一种)
所以三阶台阶有三种跳法
当有四阶时:如果最开始跳了一阶,那么后面便是再跳一次三阶:1,1,1,1;1,1,2;1,2,1;(三种)
 如果先跳了两阶,那么后面就是再跳一次两阶:2,1,1;2,2(两种)
所以四阶台阶有五种跳法
综上所述 当有n阶台阶时,那么就有f(n-1)+f(n-2)种方式

执行代码

public class Solution {
    public int JumpFloor(int target) {
         if(target==1) return 1;
         if(target==2) return 2;
         return JumpFloor(target-2)+JumpFloor(target-1);
    }
}

变态跳台阶

题目描述

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

解题思路

当只有一阶,两阶的时候思路同跳台阶
当有三阶的时候:最开始就会有1,2,3阶三种跳法即f(1)+f(2)+f(3)其中f(3)=1
当有四阶台阶的时候就会有1,2,3,4阶四种跳法。即f(1)+f(2)+f(3)+f(4)其中f(4)=1
综上所述 当我们将小青蛙跳n级台阶,一次结束这种跳法记为f(0)时,我们便可以发现规律
f(n-1)=f(n-1)+…+f(0)
f(n)=f(n-1)+f(n-2)+…+f(0)=2*f(n-1)

执行代码

public class Solution {
    public int JumpFloorII(int target) {

        if (target <= 0) {
            return -1;
        } else if (target == 1) {
            return 1;
        } else {
            return 2 * JumpFloorII(target - 1);
        }
    }
}
发布了67 篇原创文章 · 获赞 22 · 访问量 5808

猜你喜欢

转载自blog.csdn.net/qq_40384370/article/details/103617273
今日推荐