列表

详情


1359. 有效的快递序列数目

给你 n 笔订单,每笔订单都需要快递服务。

请你统计所有有效的 收件/配送 序列的数目,确保第 i 个物品的配送服务 delivery(i) 总是在其收件服务 pickup(i) 之后。

由于答案可能很大,请返回答案对 10^9 + 7 取余的结果。

 

示例 1:

输入:n = 1
输出:1
解释:只有一种序列 (P1, D1),物品 1 的配送服务(D1)在物品 1 的收件服务(P1)后。

示例 2:

输入:n = 2
输出:6
解释:所有可能的序列包括:
(P1,P2,D1,D2),(P1,P2,D2,D1),(P1,D1,P2,D2),(P2,P1,D1,D2),(P2,P1,D2,D1) 和 (P2,D2,P1,D1)。
(P1,D2,P2,D1) 是一个无效的序列,因为物品 2 的收件服务(P2)不应在物品 2 的配送服务(D2)之后。

示例 3:

输入:n = 3
输出:90

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int countOrders(int n) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 1.7 MB, 提交时间: 2023-09-21 11:01:06

func countOrders(n int) int {
    MOD := 1000000007
    ans := n
    for i := 1; i < n * 2; i++ {
        if i % 2 == 0 {
            ans = (ans * i / 2) % MOD
        } else {
            ans = (ans * i) % MOD
        }
    }
    return ans
}

java 解法, 执行用时: 0 ms, 内存消耗: 38 MB, 提交时间: 2023-09-21 10:59:35

class Solution {
    public int countOrders(int n) {
        long mod = 1000000007;
        long ans = n;
        for(long i = 1;i<n*2;i++){
            if(i % 2 ==0){
                ans = (ans * i / 2) % mod;
            }else{
                ans = (ans * i) % mod;
            }
        }
        return (int)ans;
    }
}

python3 解法, 执行用时: 44 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-21 10:59:10

MOD = 10**9 + 7
dp = [0]*501
dp[1] = 1
for i in range(2, 501):
    dp[i] = dp[i-1]*(2*i-1)*i
    dp[i] %= MOD


class Solution:
    def countOrders(self, n: int) -> int:
        return dp[n]

python3 解法, 执行用时: 56 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-21 10:58:53

class Solution:
    def countOrders(self, n: int) -> int:
        if n == 1:
            return 1
        ans, mod = 1, int(1e9 + 7)
        for i in range(2, n + 1):
            ans = ans * (i * 2 - 1) * i % mod
        return ans

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.1 MB, 提交时间: 2023-09-21 10:58:33

using LL = long long;

class Solution {
private:
    static constexpr int mod = 1000000007;
    
public:
    int countOrders(int n) {
        if (n == 1) {
            return 1;
        }
        int ans = 1;
        for (int i = 2; i <= n; ++i) {
            ans = (LL)ans * (i * 2 - 1) % mod * i % mod;
        }
        return ans;
    }
};

上一题