剑指offer之七---跳台阶

来源:互联网 发布:2016年网络大电影数据 编辑:程序博客网 时间:2024/06/06 17:40

题目描述

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


时间限制:1秒空间限制:32768K


思路一:


1.假设当有n个台阶时假设有f(n)种走法。
2.青蛙最后一步要么跨1个台阶要么跨2个台阶。
3.当最后一步跨1个台阶时即之前有n-1个台阶,根据1的假设即n-1个台阶有f(n-1)种走法。
4. 当最后一步跨2个台阶时即之前有n-2个台阶,根据1的假设即n-2个台阶有f(n-2 )种走法。
5.显然n个台阶的走法等于前两种情况的走法之和即f(n)=f(n-1)+f(n-2)。
6.找出递推公式后要找公式出口,即当n为1、2时的情况,显然n=1时f(1)等于1,f(2)等于2
7.        | 1, (n=1)

f(n) =  |2, (n=2)

           | f(n-1)+f(n-2) ,(n>2,n为整数)
链接:https://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4来源:牛客网public int JumpFloor(int target) {        int result = 0;        if(target > 0){        if(target<=2)            return target;        else            return result=JumpFloor(target-1)+JumpFloor(target-2);     }     return result;     }

思路二:迭代
public static int JumpFloor(int target) {if (target == 1 || target == 2) {return target;}// 第一阶和第二阶考虑过了,初始当前台阶为第三阶,向后迭代// 思路:当前台阶的跳法总数=当前台阶后退一阶的台阶的跳法总数+当前台阶后退二阶的台阶的跳法总数int jumpSum = 0;// 当前台阶的跳法总数int jumpSumBackStep1 = 2;// 当前台阶后退一阶的台阶的跳法总数(初始值当前台阶是第3阶)int jumpSumBackStep2 = 1;// 当前台阶后退二阶的台阶的跳法总数(初始值当前台阶是第3阶)for (int i = 3; i <= target; i++) {jumpSum = jumpSumBackStep1 + jumpSumBackStep2;jumpSumBackStep2 = jumpSumBackStep1;// 后退一阶在下一次迭代变为后退两阶jumpSumBackStep1 = jumpSum; // 当前台阶在下一次迭代变为后退一阶}return jumpSum;}

原创粉丝点击