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

Kimi K2.6 思考 LeetCode 3260. 找出最大的 N 位 K 回文数 Java实现

LeetCode 3260 要求找出最大的 n 位 K 回文数(可被 k 整除的回文数)。由于 `k ≤ 9` 而 `n ≤ 10^5`,最优雅的解法是按 k 分类讨论找规律,这样时间复杂度为 O(n),空间复杂度为 O(1)(除结果字符串外)。

以下是基于题解规律总结的 Java 实现:

```java
class Solution {
public String largestPalindrome(int n, int k) {
// k = 1, 3, 9: 所有位都是9即可被整除
if (k == 1 || k == 3 || k == 9) {
return "9".repeat(n);
}

// k = 2: 末位必须是偶数,首位和末位取最大的偶数8
if (k == 2) {
if (n == 1) return "8";
return "8" + "9".repeat(n - 2) + "8";
}

// k = 4: 末两位需被4整除,88是最大满足条件的末两位
if (k == 4) {
if (n <= 2) return "8".repeat(n);
if (n == 3) return "888";
if (n == 4) return "8888";
// n >= 5: 前两位和末两位都是88,中间全9
return "88" + "9".repeat(n - 4) + "88";
}

// k = 5: 末位必须是5或0,取5(不能前导零),首位末位都是5
if (k == 5) {
if (n == 1) return "5";
return "5" + "9".repeat(n - 2) + "5";
}

// k = 6: 需同时满足被2和被3整除
// 被2整除:末位偶数;被3整除:数字和是3的倍数
if (k == 6) {
if (n == 1) return "6";
if (n == 2) return "66";
// n >= 3: 首尾取8(保证偶数且尽量大)
// 中间需要调整使数字和为3的倍数
if (n % 2 == 1) {
// 奇数位: 8...8...8,中间一位调整
// 8 + 8 + 9*(n-3) = 16 + 9*(n-3), 需中间位使总和%3==0
// 中间位取8: 总和 = 16 + 8 + 9*(n-3) = 24 + 9*(n-3) ≡ 0 (mod 3)
int tmp = (n - 3) / 2;
return "8" + "9".repeat(tmp) + "8" + "9".repeat(tmp) + "8";
} else {
// 偶数位: 中间两位取77
// 8 + 8 + 7 + 7 + 9*(n-4) = 30 + 9*(n-4) ≡ 0 (mod 3)
int tmp = (n - 4) / 2;
return "8" + "9".repeat(tmp) + "77" + "9".repeat(tmp) + "8";
}
}

// k = 7: 规律较复杂,中间部分需要枚举
if (k == 7) {
if (n <= 2) return "7".repeat(n);

// n > 2时,大部分位是9,只需调整中间1位(奇数)或2位(偶数)
if (n % 2 == 1) {
int half = (n - 1) / 2;
for (int m = 9; m >= 0; m--) {
// 构造回文:half个9 + m + half个9
String s = "9".repeat(half) + m + "9".repeat(half);
if (mod(s, 7) == 0) return s;
}
} else {
int half = (n - 2) / 2;
for (int m = 9; m >= 0; m--) {
String s = "9".repeat(half) + m + m + "9".repeat(half);
if (mod(s, 7) == 0) return s;
}
}
}

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

return "";
}

// 辅助方法:计算大数字符串对k取模(避免溢出)
private int mod(String s, int k) {
int res = 0;
for (char c : s.toCharArray()) {
res = (res * 10 + (c - '0')) % k;
}
return res;
}
}
```

核心规律说明

k 规律 示例 (n=5)
1, 3, 9 全9 `99999`
2 首尾8,中间9 `89998`
4 前两位末两位88,中间9 `88988` (n=5)
5 首尾5,中间9 `59995`
6 奇数:首尾8中间8;偶数:首尾8中间77 `89898`
7 大部分9,中间枚举 `99799` (n=5)
8 前三位末三位888,中间9 `88988` (n=5)

复杂度分析

- 时间复杂度: O(n) — 主要是字符串构造,k=7时最多枚举10种中间情况
- 空间复杂度: O(n) — 返回结果字符串的空间

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

http://www.gsyq.cn/news/1531805.html

相关文章:

  • Java毕业设计-基于 SpringBoot 的线上家教服务系统设计与实现 面向校园的家教资源匹配管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Moonlight-Switch终极指南:让任天堂Switch免费畅玩PC游戏大作
  • 反向海淘订单状态机设计:taocarts 状态流转与并发控制
  • 干货合集:盘点2026年用户挚爱的一键生成论文工具
  • 2026合肥专业的陪驾公司联系电话及服务参考 - 品牌排行榜
  • 《LangChain 系列》Human-in-the-loop:什么时候必须让人工介入?
  • 寄大件用什么物流便宜?大件快递怎么寄最省钱?教你几招避坑技巧 - 快递物流资讯
  • Matlab图像处理避坑:灰度变换时im2double、uint8这些数据类型转换到底怎么用?
  • 2026测评视角拆解:香港公屋“奇葩”不规则户型,全屋定制怎么做才不翻车?
  • 深入解析MSC8251单核DSP SoC架构:从核心、内存到高速数据通路
  • 2026年更新:探寻佛山实木家具维修源头厂家的专业之选 - 品牌鉴赏官2026
  • 3步解锁显卡潜能:DLSS Swapper智能性能引擎完全实战手册
  • ESXi网络配置踩坑实录:给Ubuntu虚拟机加第二张网卡后,为什么上不了网了?
  • 2026年 防水排水板/膨润土防水毯/三维复合排水网/透水管/软式透水管/硬式透水管厂家专业实力解析 - 企业推荐官【官方】
  • 解决OpenWrt Dnsmasq常见问题:DHCP响应慢、日志刷屏与AdGuard Home兼容
  • OBS Spout2插件终极指南:突破分辨率限制的专业视频共享方案
  • CZSC缠论插件终极指南:3分钟让通达信变身智能缠论分析系统
  • 2026年新消息:德州展厅广告物料实体门店可靠选择与联系解析 - 品牌鉴赏官2026
  • PXD10微控制器引脚复用实战:从原理到配置避坑指南
  • 除了CORS头,你的Nginx反向代理配置可能还少了这一行:处理Origin头的正确姿势
  • PPTist完全指南:免费网页版PPT制作工具终极教程
  • 终极Silk音频格式转换工具:一键解码微信QQ语音文件为MP3
  • 5分钟快速上手:Open-Lyrics智能字幕生成工具完整指南
  • 2026甄选:水质测定仪品牌与供应厂家,国标法COD/氨氮/总磷/总氮/BOD5测定仪专业选择 - 企业推荐官【官方】
  • EP2AGX45DF29I3N在国防电子与工业控制中的FPGA方案
  • 嵌入式DCU软锁与图层混合机制详解:以NXP PXD10为例
  • 别再被WinError 10061卡住了!手把手教你解决pip安装LangChain时的代理连接问题
  • 2026年6月瑞安黄金回收市场深度调查:三家诚信商家排名与避坑指南 - 钦扬网络
  • 短视频去字幕用什么工具方便?2026司马去水印免费一键去字幕完整教程 - 科技大爆炸
  • paperxie 降重降 AIGC 多档位工具:适配全网检测体系的论文优化解决方案