leetcode 70爬楼梯

leetcode 70爬楼梯_第1张图片

 思路:给出n,计算n中2和1的个数,根据2和1的个数不同可以分成许多情况,然后采用全排序法

class Solution:
    def climbStairs(self,n: int) -> int:
        num = 1 #全为1
        numoftwo = int(n/2)
        jiecheng = [] #储存1到45的阶乘
        tmp = 1
        for i in range(1,46):
            tmp *= i
            jiecheng.append(tmp) 
        if n%2 == 0:
            num += 1 #全为1
            numoftwo -= 1

        while numoftwo > 0:
            p = n - numoftwo * 2 #1的个数
            q = numoftwo #2的个数
            #全排列出现相同的数 要除以那个相同的数的个数的阶乘
            num += jiecheng[p + q - 1] / (jiecheng[p - 1] * jiecheng[q - 1])
            numoftwo -= 1
        return int(num)

leetcode 70爬楼梯_第2张图片

 

你可能感兴趣的:(leetcode,算法,职场和发展)