计蒜客 第16题:爬楼梯

假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?
格式:
第一行输入一个数n(n<=50),代表楼梯的级数。
接下来一行输出你的方法总数。
样例1
输入:
5
输出:
8

#  爬楼梯的结果实际上是一个斐波纳契数列
num1 = int(raw_input())

a=1
b=2
if num1==1:
    print 1
if num1==2:
    print 2
if num1>2:
    for i in range(3,num1+1):
        a,b=b,a+b
    print b

再来一个通用爬楼梯算法.

# coding=utf-8

count = 0


def getCount(stack, remain, limit):
    # stack:已经爬过的楼梯,是一个列表,remain:剩下要爬的楼梯阶数,limit:每次可以爬多少阶
    global count
    for i in range(1, limit + 1):
        stack.append(i)  # 爬一次
        if remain == i:
            # 如果要爬的阶数=剩下的阶数,说明已经爬完了
            # print stack # 这句打印爬的具体方案
            count += 1  # 爬完一次,方案数+1
            stack.pop()  # 退回爬这次之前
            break
        else:
            getCount(stack, remain - i, limit)  # 如果没爬完,接着爬剩下的,
            stack.pop()  # 剩下的台阶已经爬完,退回到上次爬之前


getCount([], 5, 2)  # 爬5个阶梯,每次可以爬1-2.
print count
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值