6168. 恰好移动 k 步到达某一位置的方法数目

6168. 恰好移动 k 步到达某一位置的方法数目

被坑了,scipy的comb默认计算组合数是不精确的,使用浮点数计算,需要加参数exact=True才会使用整型long long 计算。

以下三个结果里,res2是错误的。

from scipy.special import comb
MOD = int(1e9 + 7)

import math

def factorial_(n):
    result=1
    for i in range(2,n+1):
        result=result*i
    return result

def comb_1(n,m):
    return math.factorial(n)//(math.factorial(n-m)*math.factorial(m))  #直接使用math里的阶乘函数计算组合数

class Solution(object):
    def numberOfWays(self, startPos, endPos, k):
        dis = abs(startPos - endPos)
        if (k + dis) & 1 or k < dis:
            return 0

        n = (k + dis) / 2
        n = int(n)
        m = k

        res1 = int(comb_1(m, n)) % MOD
        res2 = int(comb(m, n)) % MOD
        res3 = int(comb(m, n, exact = True)) % MOD
        print(res1)
        print(res2)
        print(res3)

        return res3

你可能感兴趣的:(6168. 恰好移动 k 步到达某一位置的方法数目)