【LeetCode】70. 爬楼梯

178 阅读1分钟

Description

Dynamic Programming

URL: leetcode-cn.com/problems/cl…

**关键点:**找 最近 重复 子 问题 !!!

思路

一级台阶:1种(1)

两级台阶:2种(1+1 or 2)

三级台阶:?

三级台阶等于 退一步变二级台阶 or 退两步变一级台阶 => 2 + 1

四级台阶:?

四级台阶等于 退一步变三级台阶 or 退两步变二级台阶 => 3 + 2

所以,可以看出递归思想(纯递归简单无缓存写法时间复杂度过高);要用迭代的方式写出来

(๑*◡*๑) 啊 这个是斐波拉契数


Python

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 2: return n
        i, j, k = 1, 2, 3
        for stairs in range(3, n + 1):
            k = i + j
            i = j
            j = k
        return k

Java

class Solution {
    public int climbStairs(int n) {
        if (n <= 2) return n;
        int f1 = 1, f2 = 2, f3 = 3;
        for (int i = 3; i < n+1; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }      
        return f3;
    }
}

END (〃'▽'〃)