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

Kimi K2.6快速 LeetCode 3260. 找出最大的 N 位 K 回文数 Rust实现

以下是 LeetCode 3260 **找出最大的 N 位 K 回文数** 的 **Rust 实现**,基于 k 的分类讨论规律解法,时间复杂度 O(n),空间复杂度 O(n)。

```rust
impl Solution {
pub fn largest_palindrome(n: i32, k: i32) -> String {
let n = n as usize;
match k {
// k = 1, 3, 9: 全9即可被整除
1 | 3 | 9 => "9".repeat(n),

// k = 2: 末位需为偶数,取最大偶数8
2 => {
if n <= 2 {
"8".repeat(n)
} else {
format!("8{}8", "9".repeat(n - 2))
}
}

// k = 4: 末两位需被4整除,88是最大满足条件的两位
4 => {
if n <= 4 {
"8".repeat(n)
} else {
format!("88{}88", "9".repeat(n - 4))
}
}

// k = 5: 末位需为0或5,取5
5 => {
if n <= 2 {
"5".repeat(n)
} else {
format!("5{}5", "9".repeat(n - 2))
}
}

// k = 6: 需同时满足被2和被3整除
6 => {
if n <= 2 {
"6".repeat(n)
} else if n % 2 == 1 {
// 奇数位: 8...8...8,中间8保证数字和为3的倍数
let l = n / 2 - 1;
format!("8{}8{}8", "9".repeat(l), "9".repeat(l))
} else {
// 偶数位: 中间两位取77
let l = n / 2 - 2;
format!("8{}77{}8", "9".repeat(l), "9".repeat(l))
}
}

// k = 7: 规律最复杂,按 n % 12 查表
7 => {
if n <= 2 {
"7".repeat(n)
} else {
let middle = vec![
"", "7", "77", "959", "9779", "99799",
"999999", "9994999", "99944999", "999969999",
"9999449999", "99999499999",
];
let q = n / 12;
let r = n % 12;
format!(
"{}{}{}",
"999999".repeat(q),
middle[r],
"999999".repeat(q)
)
}
}

// k = 8: 末三位需被8整除,888是最大满足条件的三位
8 => {
if n <= 6 {
"8".repeat(n)
} else {
format!("888{}888", "9".repeat(n - 6))
}
}

_ => String::new(),
}
}
}
```

核心思路说明

由于 `k ≤ 9`,可以对每个 k 值利用整除规则和回文约束分别找规律:

k 关键规则 构造方式
1, 3, 9 数字和是3/9的倍数 全 `9`
2 末位偶数 首尾 `8`,中间全 `9`
4 末两位被4整除 前两位和末两位 `88`,中间全 `9`
5 末位0或5 首尾 `5`,中间全 `9`
6 被2且被3整除 奇数:`8...8...8`;偶数:中间 `77`
7 无简单规则 按 `n % 12` 查中间表,两侧填充 `999999`
8 末三位被8整除 前三位和末三位 `888`,中间全 `9`

k = 7 的特殊处理

k=7 的规律最为复杂,通过数学推导发现结果以 12 为周期循环。因此预存了 12 种中间模式(`middle` 数组),两侧用 `999999` 填充:

- `n = 3` → `959`(中间模式索引 3)
- `n = 5` → `99799`(中间模式索引 5)
- `n = 6` → `999999`(中间模式索引 6)
- `n = 12` → `999999999999`(两侧各一个 `999999`,中间为空)
- `n = 15` → `999999959999999`(两侧各一个 `999999`,中间 `959`)

复杂度分析

- 时间复杂度: O(n) — `String::repeat` 和 `format!` 的字符串构造
- 空间复杂度: O(n) — 返回结果字符串所需空间

这种方法比通用的 DP 解法(O(nk) 时间)更简洁高效,充分利用了 `k ≤ 9` 的题目约束。

http://www.cnnetsun.cn/news/2938305.html

相关文章:

  • 影刀RPA进阶教程_定时任务的正确配置姿势单次循环多任务与故障恢复
  • 深入解析PXD10电源管理模式:从基础原理到低功耗设计实践
  • 三步掌握lilToon卡通渲染的终极实战指南
  • 跨境多账号新环境从零搭建完整配置指南
  • 如何用自然语言控制电脑?UI-TARS桌面助手给你答案
  • PXD10微控制器中断调度与LCD驱动在嵌入式实时系统中的应用
  • MPC860 PIP模块:嵌入式并行通信的硬件协议解析与Centronics实现
  • AI 智能合约审计:从人工审查到自动化检测,Web3 安全的智能化防线
  • 工装裤与外套缝制自动化对比:真实设备选型与工艺适配指南
  • DLSS Swapper终极指南:如何轻松管理游戏DLSS版本,提升显卡性能30%以上
  • Microsoft Foundry Toolkit:在VS Code中快速构建AI智能应用的终极解决方案
  • MPC860 PowerQUICC系列选型与硬件差异深度解析
  • 如何快速掌握FOGProject:企业级设备批量部署完整攻略
  • 嵌入式DMA控制器原理与实战:从触发机制到性能优化
  • MarkDownload:3分钟掌握网页转Markdown的终极免费工具
  • 神经回放机制:让AI具备情境触发的经验重演能力
  • SPE向量指令集深度解析:从SIMD原理到DSP实战优化
  • 继续推进心语项目6.15 @CodeArts
  • 3分钟搞定:这款Chrome插件让你轻松下载网页视频资源
  • Little Navmap:开源飞行规划工具的终极解决方案
  • 别再踩坑了!Windows 10/11 下 Hadoop 3.3.6 环境搭建保姆级教程(含 winutils 配置)
  • 【小白也能轻松用】本地AI智能体搭建,OpenClaw零基础简易部署方法(含最新安装包)
  • 告别繁琐部署!Hermes Agent 桌面版正式发布:全平台支持,小白也能轻松上手的“真”自主大模型智能体
  • 别再手动点jmeter.bat了!一招配置环境变量,让Jmeter在命令行里随叫随到
  • 别再死记硬背了!用程序员能懂的大白话,重新理解计算机组成原理(Cache、流水线、I/O篇)
  • Autodl抢GPU太卷?试试这个‘挂机脚本’思路,释放你的时间和精力
  • 从LTE到NR:聊聊ns-3中5G-LENA模块的演进与仿真场景搭建
  • 别再只会用ST-Link了!手把手教你用CH340G和串口给STM32下载程序(附自动切换启动模式电路详解)
  • 别再瞎调了!XILINX FFT IP核这3个配置项,直接决定了你的FPGA资源消耗和性能
  • 【风电功率预测】【多变量输入单步预测】基于VMD-CNN-LSTM的风电功率预测研究附Matlab代码