腾讯2020笔试求种花排列数

import itertools
import  sys

class Solution:
    def get_keys(self):
        k = 2
        vals = [[1,3],[2,3],[4,4]]
        
        m = 0
        for i in vals:
            for t in i:
                m = max(t,m)

        dp = []
        for i in range(1,m+1):
            count = 0
            for j in [x*2 for x in range((m/k)+1)]:
                if j<=i:
                    count +=self.get_count(i,j,k)
            dp.append(count)

        res =[]
        for val in vals:
            c1 = 0
            for i in range(val[0],val[1]+1):
                c1+=dp[i-1]
            res.append(c1)
        print(res)



    def get_count(self,n,m,k):
        if m==0:
            return 1
        if m==n:
            return 1
        n = n-(m/k)
        m = m/k
        r1 = self.factorial(n)/(self.factorial(m)*self.factorial(n-m))
        return r1
    def factorial(self,n):
        if n ==0:
            return 1
        result = n
        for i in range(1, n):
            result *= i
        return result



if __name__ == "__main__":
    s = Solution()

    s.get_keys()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值