一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
青蛙每次只能向上跳1级或两级,在青蛙跳到第n个台阶时,只可能是从第n-1个台阶跳上去或者是从第n-2个台阶跳上去的,就可以直接转成求斐波那契数问题,只不过这里f0=1,f1=1。具体解决过程参考代码。
package learnproject.offer;
/*
* 10.青蛙跳台阶问题
*/
public class Demo10_2 {
/*
* 青蛙每次只能向上跳1级或两级,在青蛙跳到第n个台阶时,只可能是从第n-1个台阶跳上去的
* 或者是从第n-2个台阶跳上去的,就可以直接转成求斐波那契数问题,只不过这里f0=1,f1=1
*/
public int numWays(int n) {
int f0 = 1;
int f1 = 1;
if(n == 0) {
return f0;
}
if(n==1) {
return f1;
}
int fn = 0;
int t = 1000000007;
for(int i=2;i<=n;i++) {
fn = f0+f1;
if(fn>=t) {
fn = fn%t;
}
f0 = f1;
f1 = fn;
}
return fn;
}
public static void main(String args[]) {
Demo10_2 demo = new Demo10_2();
System.out.println(demo.numWays(5));
}
}