剑指Offer——变态跳台阶
1、题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
2、代码实现
package com.baozi.offer; /** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 * * @author BaoZi * @create 2019-07-11-10:32 */ public class Offer8 { public static void main(String[] args) { Offer8 offer8 = new Offer8(); int reslut = offer8.JumpFloorII(4); System.out.println(reslut); } /** * 当有1节台阶的时候:1种跳法(一次跳一阶) * 当有2阶台阶的时候:2种跳法(一次跳一阶+一次跳两阶) * 当有3阶台阶的时候:4种跳法(一次跳一阶+一次跳两阶再跳一阶+一次跳一阶再跳两阶+一次跳三阶) * 当有4阶台阶的时候:7种跳法( * 当第一步先跳1阶,剩下3阶和当有3阶的情况是一样的(4) * 当第一步先跳2阶,剩下2阶和当有2阶的情况是一样的(2) * 当第一步先跳3阶,剩下1阶和当有1阶的情况是一样的(1) * 当第一步先跳4阶,剩下0阶直接跳上去了(1) * ) * 当有n阶台阶的时候( * 当第一步先跳1阶,剩下n-1阶和当有n-1阶的情况是一样的 * 当第一步先跳2阶,剩下n-2阶和当有n-2阶的情况是一样的 * 当第一步先跳3阶,剩下n-3阶和当有n-3阶的情况是一样的 * ............. * 当第一步先跳n阶,剩下0阶直接跳上去了(1) * ) * 所以:当n>=3的时候,JumpFloorII(n) = JumpFloorII(n-1)+JumpFloorII(n-2)+....+JumpFloorII(2)+JumpFloorII(1)+1; * * @param target 台阶的总阶数 * @return 青蛙跳上一个n级的台阶总共有多少种跳法 */ public int JumpFloorII(int target) { int result = 0; if (target == 1) { result = 1; } if (target == 2) { result = 2; } if (target >= 3) { while (target > 0) { target--; result = result + JumpFloorII(target); } result += 1; } return result; } }