python [LeetCode] 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

思路
把这个当作是一个排列组合的问题。我们所需考虑的就是我们要走几个两步,这几个两步要怎么走?
以台阶数是9为例。我们分以下情况进行考虑:
1.走0个两步(即全走1步)
此时只有一种走法
2.走1个两步
这就意味着,我们要走1个两步,7个一步。所以我们的走法为
在这里插入图片描述
3.走2个两步
这就意味着,我们要走2个两步,5个一步。所以我们的走法为
在这里插入图片描述
4.走3个两步
这就意味着,我们要走3个两步,3个一步。所以我们的走法为
在这里插入图片描述
5.走4个两步
这就意味着,我们要走4个两步,1个一步。所以我们的走法为
在这里插入图片描述
最后把每个情况的结果加起来就行了。

代码如下

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        num_2 = n//2     #计算最多可以走几个两步
        res = 0
        for i in range(1,num_2+1):
            C_n = i          #排列组合的上面元素
            C_m = n-2*i+i	 #排列组合的下面元素
            fenzi,fenmu = 1,1
            for j in range(1,C_n+1):
                fenmu = fenmu*j
                fenzi = fenzi*C_m
                C_m -=1
            res += fenzi/fenmu
        return res+1         #加上全走1步的情况

猜你喜欢

转载自blog.csdn.net/qq_34771726/article/details/88305524