leetcode 70 爬楼梯


描述:

假设你正在爬楼梯。须要 n 阶你才能到达楼顶。数组

每次你能够爬 1 或 2 个台阶。你有多少种不一样的方法能够爬到楼顶呢?缓存

注意:给定 n 是一个正整数。bash

示例 1:

输入: 2
输出: 2
解释: 有两种方法能够爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶复制代码

示例 2:

输入: 3
输出: 3
解释: 有三种方法能够爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

复制代码

思路:

这里提供两种思路:

1 回溯,即 f(n) = f(n - 1)+ f(n - 2),直接回溯的话,leetcode上会超时,因此能够自定义一个缓存,用数组来保存结果。ui

2 动态规划,能够当作斐波那契数列来接,用递推的方式作,循环,从 f(1),f(0)开始加和到f(n)spa

代码1:

class Solution {
  public int climbStairs(int n) {
    int[] memory = new int[n + 1];
    return helper(n, memory);
  }

  private int helper(int n, int[] memory) {
    if (n <= 2) {
      return n;
    } else if (memory[n] == 0) {
      memory[n] = helper(n - 1, memory) + helper(n - 2, memory);
    }
    return memory[n];
  }
}
复制代码


结果1:


代码2:

class Solution {
    public int climbStairs(int n) {
        int a = 0;
        int b = 1;
        for(int i = 1;i<=n;i++){
          int c = a;
          a = b;
          b = c+b;
        }
        return b;
    }
}复制代码

结果2:


复制代码
相关文章
相关标签/搜索