leedcode 70 Climbing Stairs

本文探讨了经典的爬楼梯问题,并通过斐波那契数列找到解决方案。文章提供了两种方法:动态规划和递归算法,来计算达到第n级楼梯的不同方式的数量。

 

70Climbing Stairs    40.90%爬楼梯,斐波那契数列

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Feb  7 22:43:23 2018

@author: vicky
"""
#思路:斐波那契数列问题:
#    n<=2,此时只有一种或两种。
#    n>2时,对于每一个台阶i,要到达台阶,最后一步都有两种方法,从i-1迈一步,或从i-2迈两步。
#          也就是说到达台阶i的方法数=达台阶i-1的方法数+达台阶i-2的方法数
#        F[1]=1
#        F[2]=2
#        F[n]=F[n-1]+F[n-2](n>2)

#动态
class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        f1=1
        f2=2
        k=3
        if n==1:
            return f1
        if n==2:
            return f2
        while k<=n:
            f=f1+f2
            f1=f2
            f2=f
            k=k+1
        return f

#递归,时间久
class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        f1=1
        f2=2
        if n==1:
            return f1
        elif n==2:
            return f2
        else:
            return self.climbStairs(n-1)+self.climbStairs(n-2)
        #如果函数输入有self,则递归调用时候需要在函数前面加self.


n=2
print(Solution().climbStairs(n))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值