1. 简单跳台阶
1.1 题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
1.2 解题思路
对于本题,有题目描述可知,每次只能跳一个或者两个台阶,下面找一下规律:
这里假设有n阶台阶时就有f(n)种跳法
- 当有1阶台阶时只有一种跳法:f(1) = 1
- 当有2阶台阶时就可以有两种跳法:f(2) = 2
- 当有3阶台阶时,这时我们先看第一步怎么走,分两种情况:
当先跳1个台阶,那剩下就是2个台阶,这时剩下的2个台阶最多只有f(2)种跳法; 当先跳2个台阶,那剩下就是1个台阶,就是f(1)种跳法;那么也即是n=3时,两种情况加起来就是:f(3)=f(1)+f(2) - 当有4阶台阶时,同理我们这里也分两种情况:
当先跳1个台阶,那剩下就是3个台阶,这时剩下的3个台阶最多只有f(3)种跳法; 当先跳2个台阶,那剩下就是2个台阶,就是f(2)种跳法;那么也即是n=4时,两种情况加起来就是:f(4)=f(3)+f(2)
从行面的分析可以看出,这其实是一个斐波那契数列。
1.3 代码
方法1:
public class JumpingStairs {
public static void main(String[] args){
JumpingStairs mm=new JumpingStairs();
int tt=mm.jump(3);
System.out.println(tt);
}
public int jump(int n){
if (n==0)
return 0;
int f1=1;
int f2=2;
while(n>1) {
f2 += f1;
f1=f2-f1;
n--;
}
return f1;
}
}
运行:
3
方法2:
public class JumpingStairs {
public static void main(String[] args){
JumpingStairs mm=new JumpingStairs();
int tt=mm.jump(3);
System.out.println(tt);
}
public int jump(int target){
if(target <= 0) return 0;
if(target == 1) return 1;
if(target == 2) return 2;
int one = 1;
int two = 2;
int result = 0;
for(int i = 2; i < target; i++){
result = one+ two;
one = two;
two = result;
}
return result;
}
}
2. 变态跳台阶
2.1 题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
2.2 解题思路
这里的f(n) 代表的是n个台阶的跳法数。
- n = 1时,只有1种跳法,f(1) = 1
- n = 2时,这里同样按照上面简单跳台阶的分析方式:
当第一步跳1阶时,那么剩下的1阶只用1种跳法,即f(1);当第一步跳2阶时,那就不剩下阶梯了,也即是f(0)种跳法,这里f(0)=1,代表一步跳到最高层。得到:f(2)=f(1)+f(0) - n = 3时,分析同上:
当第一步跳1阶时,那么剩下的2阶只用f(2)种跳法,即f(2);当第一步跳2阶时,那剩下1个阶梯,只有f(1)种跳法,当第一步跳3阶时,那剩下0个阶梯,这种一步跳法即是f(0)。得到f(3)=f(2)+f(1)+f(0) - n = n-1时,会得到:
f(n-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) - n = n时,会得到:
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)+ f(n-1)
综上:
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)+ f(n-1)=f(n-1)+f(n-1)= 2*f(n-1)
2.3 代码
public class MetaJumpingStairs {
public static void main(String[] args){
MetaJumpingStairs mm=new MetaJumpingStairs();
int tt=mm.jump(3);
System.out.println(tt);
}
public int jump(int target){
int f=1;
if (target<=0)
return 0;
while(target>1){
f=2*f;
target--;
}
return f;
}
}
运行:
4
这里仅作学习笔记。