Kimi LeetCode LCP 25. 古董键盘 Rust实现

发布时间:2026/10/24 13:41:21
Kimi    LeetCode LCP 25. 古董键盘 Rust实现 LCP 25. 古董键盘 — Rust 实现核心思路- 状态dp[i] 表示已考虑的字母中构成长度为 i 的字符串的方案数。- 转移每引入一个新字母假设它在字符串中出现 x 次0 ≤ x ≤ k- 从 i 个位置选 x 个放该字母C(i, x)- 剩余 i-x 个位置由之前字母填充dp[i-x]- 滚动26 个字母依次处理一维数组滚动更新。---完整代码可直接提交rustimpl Solution {pub fn keyboard(k: i32, n: i32) - i32 {const MOD: i64 1_000_000_007;let k k as usize;let n n as usize;// 1. 预计算组合数 C[i][x]从 i 个位置选 x 个// i 最大 130x 最大 5数值很小let mut c vec![vec![0i64; k 1]; n 1];for i in 0..n {c[i][0] 1;let max_x k.min(i);for x in 1..max_x {c[i][x] (c[i - 1][x - 1] c[i - 1][x]) % MOD;}}// 2. dp[i]已考虑字母中构成长度为 i 的方案数let mut dp vec![0i64; n 1];dp[0] 1; // 空串// 3. 依次处理 26 个字母for _ in 0..26 {let mut new_dp vec![0i64; n 1];for i in 0..n {let max_x k.min(i);for x in 0..max_x {new_dp[i] (new_dp[i] dp[i - x] * c[i][x]) % MOD;}}dp new_dp;}dp[n] as i32}}---关键点说明要点 说明i64 中间计算 防止乘法溢出最后转 i32 返回帕斯卡递推 C[i][x] C[i-1][x-1] C[i-1][x]预计算避免重复求组合数滚动数组 每处理一个字母就生成新的 new_dp空间 O(n)取模时机 组合数预计算和 DP 转移时都 % MOD保证不溢出复杂度- 时间O(26 × n × k) ≈ O(n·k)其中 n ≤ 130, k ≤ 5- 空间O(n·k) 组合数表 O(n) DP 数组

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询