【leetcode】爬楼梯

class Solution:
    def climbStairs(self, n: int) -> int:
        # Solution 1:递归,会超时
        '''
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n-1) + self.climbStairs(n-2)
        '''

        # Solution 2:递归 + 哈希,超时
        '''
        if n == 1:
            return 1
        if n == 2:
            return 2

        hash_res = {}
        if (n-1) not in hash_res:
            hash_res[n-1] = self.climbStairs(n-1)
        if (n-2) not in hash_res:
            hash_res[n-2] = self.climbStairs(n-2)
        return hash_res[n-1] + hash_res[n-2]
        '''

        # Solution 3:迭代
        if n == 1:
            return 1
        if n == 2:
            return 2

        res_one = 2 # 记录f(n-1)
        res_two = 1 # 记录f(n-2)
        res = 0 # 记录最终结果f(n)
        for i in range(3, n+1):
            res = res_one + res_two
            res_two = res_one # 下一步n=n+1了,所以f(n-1) -> f(n-2)
            res_one = res # 下一步n=n+1了,所以f(n) -> f(n-1)
        return res
            
        

猜你喜欢

转载自blog.csdn.net/ningmengzhihe/article/details/127819002