跳台阶
题目描述
一只青蛙一次可以跳上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);
}
}
}