当前位置: 首页 > article >正文

Leetcode 3343. Count Number of Balanced Permutations

  • Leetcode 3343. Count Number of Balanced Permutations
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3343. Count Number of Balanced Permutations

1. 解题思路

这一题整体思路上就是一个动态规划,不过整体怎么进行动态规划坦率地说是看了下答案搞定的,有点惭愧……

不过从答案来反过来看就感觉非常显然了,就是分别考察奇偶位置上从0到9各自分配多少个数,对应有多少种分配方法,然后最后两边的差是否为0即可。

我们使用一个delta参数来记录两边的差,然后分配的个数就是一个循环遍历,然后分配方法就是 C n i C_n^i Cni

然后,我们将其转换成代码语言即可。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7

factorials = [1 for i in range(41)]
for i in range(2, 41):
    factorials[i] = (i * factorials[i-1]) % MOD
    
revs = [1 for i in range(41)]
for i in range(2, 41):
    revs[i] = pow(factorials[i], -1, mod=MOD)
    
@lru_cache(None)
def C(n, i):
    return (factorials[n] * revs[i] * revs[n-i]) % MOD

class Solution:
    def countBalancedPermutations(self, num: str) -> int:
        
        cnt = Counter(num)
        odd, even = len(num) - len(num)//2, len(num)//2
        
        @lru_cache(None)
        def dp(idx, delta, odd, even):
            if idx == 10:
                return 1 if delta == 0 else 0
            n, m = odd, even
            k = cnt[str(idx)]
            ans = 0
            for i in range(k+1):
                if i > n or k-i > m:
                    continue
                ans = (ans + C(n, i) * C(m, k-i) * dp(idx+1, delta + idx * (i*2-k), odd-i, even-k+i)) % MOD
            return ans
        
        return dp(0, 0, odd, even)

提交代码评测得到:耗时2195ms,占用内存113.7MB。


http://www.kler.cn/a/380150.html

相关文章:

  • 安全性测试
  • 【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields
  • 华为云计算知识总结——及案例分享
  • [MySQL]DQL语句(一)
  • logback日志级别动态切换四种方案
  • HarmonyOS 私仓搭建
  • HTMLCSS:呈现的3D树之美
  • mysql笔记-索引
  • vue经典前端面试题
  • Vue 自定义icon组件封装SVG图标
  • 数据结构----二叉树
  • 请用python写一段训练模型【InsCode AI 创作助手】
  • #Prompt | AI | LLM # 人类如何写出LLM理解的Prompt
  • 使用JavaScript实现新窗口打开并设置sessionStorage的简单指南
  • 批发订货系统的设计、开发及源码实现(PHP + MySQL)
  • java项目之校园资料分享平台(springboot)
  • OpenGL入门005——使用Shader类管理着色器
  • js.轮转数组和旋转链表
  • linux shell脚本学习(1):shell脚本基本概念与操作
  • 递归的相关知识(Java)全面版
  • JavaEE初阶---网络原理之TCP篇(二)
  • [VUE]框架网页开发1 本地开发环境安装
  • 北斗有源终端|智能5G单北斗终端|单兵|单北斗|手持机
  • LINUX_Ubuntu终端安装tools的命令
  • 详解Rust标准库:HashMap
  • k8s和docker常用命令笔记