Rhyme/剑指Offer 8 Java 算法 青蛙跳台阶 斐波那契数列

剑指Offer 8 Java 算法 青蛙跳台阶 斐波那契数列

package offer8;

/**
 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级
 * 求该青蛙跳上一个n级台阶总共有多少种跳法
 * 

* 我们用f(n) 表示跳上n级台阶的可以有的跳法 *

* 假设我们一开始跳得是1级台阶,那么还剩下f(n-1) *

* 假设我们一开始跳得是2级台阶,那么还剩下f(n-2) *

* 因此总跳法f(n) = f(n-1) + f(n-2) *

* 因此本题其实就是一个斐波那契数列 *

* 在本例中采用动态规划的算法来计算该题 * * @author RhymeChiang * @date 2018/02/04 **/ public class Offer8 { public static int fibonacci(int n) { if (n < 0) { return -1; } // 1级台阶只有一种跳法 if (n == 1) { return 1; } // 2级台阶有两种跳法 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)); } }

你可能感兴趣的:(Java,算法,剑指Offer)