leetcode Hot100 - 爬楼梯

69 阅读1分钟
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2

输出:2

解释:有两种方法可以爬到楼顶。

1\. 1 阶 + 1 阶

2\. 2 阶

示例 2:

输入:n = 3

输出:3

解释:有三种方法可以爬到楼顶。

1\. 1 阶 + 1 阶 + 1 阶

2\. 1 阶 + 2 阶

3\. 2 阶 + 1 阶

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/climbing-stairs

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。''
公式
      n = 1          1
f(n)  n = 2          2
     f(n-1)+f(n-2)   >3
/// 递归解法

    func climbStairs(_ n: Int) -> Int {

        if  n == 1 {return 1}

        if  n == 2 {return 2}

        return climbStairs(n-1)+climbStairs(n-2)

    }
运行超时

///  增加mapDict 减少重复计算

    var mapDict = Dictionary<Int, Int>()

    func climbStairs1(_ n: Int) -> Int {

        if  n == 1 {return 1}

        if  n == 2 {return 2}

        if mapDict[n] == nil {

            let result = climbStairs1(n-1)+climbStairs1(n-2)

            mapDict[n] = result

        }

        return mapDict[n] ?? 0

    }

image.png