70. 爬楼梯

image.png

递归解法

  1. public class Solution {
  2. // 用于缓存计算结果,防止重复计算
  3. HashMap<Integer, Integer> map = new HashMap<>();
  4. //设跳上 n 级台阶一共有 f(n) 种跳法,则 f(n) = f(n - 1) + f(n - 2)
  5. // 而 f(0) = 1, f(1) = 1
  6. public int climbStairs(int n) {
  7. if (n <= 3) return n;
  8. // 如果不存在,计算并缓存
  9. if (!map.containsKey(n - 1)) {
  10. map.put(n - 1, climbStairs(n - 1));
  11. }
  12. if (!map.containsKey(n - 2)) {
  13. map.put(n - 2, climbStairs(n - 2));
  14. }
  15. // 直接取缓存结果相加返回
  16. return map.get(n - 1) + map.get(n - 2);
  17. }
  18. }