斐波那契类算法
个人解题思路,仅供参考:
import java.util.Date; public class Test { /** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 */ public static void main(String[] args) { int n = 100; System.out.println(new Date()); System.out.println(jumpFloor(n)); System.out.println(new Date()); System.out.println(jumpFloor2(n)); System.out.println(new Date()); System.out.println(jumpFloor3(n)); System.out.println(new Date()); } /** * 递归 * @param n * @return */ public static long jumpFloor(int n) { if (n <= 1) { return 1; } else { return jumpFloor(n-1)+jumpFloor(n-2); } } /** * 动态规划,优化时间复杂度 * @param n * @return */ public static long jumpFloor2(int n) { Long[] dp = new Long[n+1]; dp[0] = dp[1] = Long.valueOf(1); for (int i=2; i<=n; ++i) { dp[i] = dp[i-1] + dp[i-2]; } return dp[n]; } /** * 动态规划,优化空间复杂度 * @param n * @return */ public static long jumpFloor3(int n) { if (n == 0 || n == 1) return n; Long a,b,c; a = b = c = Long.valueOf(1); for (int i=2; i<=n; ++i) { c = a + b; a = b; b = c; } return c; } }
运行结果: