剑指Offer 8 Java 算法 青蛙跳台阶 斐波那契数列
package offer8;
/**
* 一只青蛙一次可以跳上1级台阶,也可以跳上2级
* 求该青蛙跳上一个n级台阶总共有多少种跳法
* <p>
* 我们用f(n) 表示跳上n级台阶的可以有的跳法
* <p>
* 假设我们一开始跳得是1级台阶,那么还剩下f(n-1)
* <p>
* 假设我们一开始跳得是2级台阶,那么还剩下f(n-2)
* <p>
* 因此总跳法f(n) = f(n-1) + f(n-2)
* <p>
* 因此本题其实就是一个斐波那契数列
* <p>
* 在本例中采用动态规划的算法来计算该题
*
* @author RhymeChiang
* @date 2018/02/04
**/
public class Offer8 {
public static int fibonacci(int n) {
if (n < 0) {
return -1;
}
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int f1 = 1;
int f2 = 2;
for (int i = 3; i <= n; i++) {
f1 += f2;
f2 = f1 - f2;
}
return f1;
}
public static void main(String[] args) {
System.out.println(fibonacci(4));
}
}