剑指 Offer 10- II. 青蛙跳台阶问题

image.png
剑指 Offer 10- II. 青蛙跳台阶问题 - 图2

图片转自 https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/57xs06/

递归

image.png

  1. class Solution {
  2. // 用于缓存计算结果,防止重复计算
  3. int[] catchs = new int[100];
  4. // 此题与斐波那数列解法相似,设跳上 n 级台阶一共有 f(n) 种跳法,则 f(n) = f(n - 1) + f(n - 2)
  5. // 而 f(0) = 1, f(1) = 1
  6. public int numWays(int n) {
  7. if (n <= 1) return 1;
  8. if (catchs[n - 1] == 0) catchs[n - 1] = numWays(n - 1);
  9. if (catchs[n - 2] == 0) catchs[n - 2] = numWays(n - 2);
  10. return (catchs[n - 1] + catchs[n - 2]) % 1000000007;
  11. }
  12. }

遍历

image.png

  1. class Solution {
  2. public int numWays(int n) {
  3. // 定义 n = 0 与 n = 1 的结果
  4. int a = 1, b = 1, sum;
  5. for (int i = 0; i < n; i++) {
  6. sum = (a + b) % 1000000007;
  7. a = b;
  8. b = sum;
  9. }
  10. return a;
  11. }
  12. }