难度

  • 简单
  • 中等
  • 困难

    标签

    动态规划

    题目描述

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    注意:给定 n 是一个正整数。

    示例1:

    ```java 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。
  1. 1 阶 + 1 阶
  2. 2 阶 ```

    实例2:

    ```java 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。
  3. 1 阶 + 1 阶 + 1 阶
  4. 1 阶 + 2 阶
  5. 2 阶 + 1 阶
    1. <a name="P3fYt"></a>
    2. ## 题解
    3. <a name="6gvnR"></a>
    4. ### 1. 递归解法-可能超出时间限制
    5. 走到当前阶梯n,有两种可能,从n-1过来,或者从n-2过来。所以 f(n) = f(n-1) + f(n-2)
    6. ```java
    7. class Solution {
    8. public int climbStairs(int n) {
    9. if(n <= 2) {
    10. return n;
    11. }
    12. return climbStairs(n - 1) + climbStairs(n - 2);
    13. }
    14. }

2. 动态规划

  1. class Solution {
  2. public int climbStairs(int n) {
  3. if(n <= 2) {
  4. return n;
  5. }
  6. int f1 = 1;
  7. int f2 = 2;
  8. int cur = f2;
  9. for(int i = 3; i <= n; i++) {
  10. cur = f2 + f1;
  11. f1 = f2;
  12. f2 = cur;
  13. }
  14. return cur;
  15. }
  16. }