题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
1、这道题有规律可循,当n等于0或者1的时候,跳法都只有1种。如果是n级的话,假设方法有f[n]种,那么当n-1级的时候,假设方法有f[n-1]种方法,当n-2级的时候,有f[n-2]种方法,依此类推,我们可以得到一个关系式f[n] = f[n-1] + f[n-2] + … + f[0];f[n-1] = f[n-2] + f[n-3] + … + f[0],将这两个式子化简,可得到,f[n]=2f[n-1];
2、这样可以推导出f[2]=2f[1];f[3]=2(2f[1]);f[4]=2(2*(2*f[1]));这样就已经发现规律了。
3、代码实现上面,可以利用循环,也可以利用递归。两个方法都能实现。
参考代码
package 剑指offer.simple;
/**
* 变态跳台阶
* 题目描述
* 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
*/
public class t_4 {
public static void main(String[] args) {
System.out.println(Math.pow(3,2));
}
public class Solution {
public int JumpFloorII(int target) {
if(target==0||target==1)
{
return 1;
}
else
{
return (int) Math.pow(2,target-1);
}
}
public int JumpFloorII2(int target) {
if(target==0||target==1)
{
return 1;
}
int a=1;
for(int i=2;i<=target;i++)
{
a*=2;
}
return a;
}
}
}