爬楼梯[LeetCode]

155 阅读1分钟

题目描述

思路

n个楼梯,可以理解为第一次只走一阶,然后剩下的n-1个楼梯的可能结果 + 第一次只走二阶,然后剩下的n-2个楼梯的可能结果。
因此,符合递归的特性,但是递归写法会导致时间过长,这里可以通过空间换时间的方法,将低数值的结果保存起来即可

实现方法

class Solution {
public:
    int climbStairs(int n) {
        if (n <= 2) {
            return n;
        }
        int arr[n+1];
        arr[1] = 1;
        arr[2] = 2;
        for (int i = 3; i < n + 1; i++) {
            // 这一步保证能走到a[n] = a[n-1] + a[n-2]
            arr[i] = arr[i - 1] + arr[i - 2];
        }
        return arr[n];
    }
};

---递归思路----
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 3) {
            return n;
        }
        return climbStairs(n - 1) + climbStairs(n - 2);
    }
};