当前位置: 首页 > 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.jsqmd.com/news/1019969/

相关文章:

  • 少走弯路:2026年首选推荐的专业AI论文写作软件
  • 2026年电源排插什么牌子好?这些品牌值得关注 - 品牌排行榜
  • 嵌入式硬件控制实战:从MSC8251寄存器视角解析GPIO与I2C驱动开发
  • 2026实力之选:土工膜/土工布/土工格栅/防渗膜/HDPE膜/鱼塘防渗膜/复合土工布/玻纤格栅等工程专用品牌专业供应商 - 企业推荐官【官方】
  • 行业内比较好的合同诈骗罪刑辩律师有哪些 - 品牌排行榜
  • Java毕业设计-基于 SpringBoot 的线上家教服务系统设计与实现 面向校园的家教资源匹配管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 终极Windows风扇控制指南:从噪音烦恼到静音享受的完整解决方案
  • 2026年高温工业吸尘器十大品牌排名:Shiwosi史沃斯、TIAOZHANZ挑战者、LIRBOM厉邦推荐评测 - 工业清洁测评社
  • 2026年生态袋源头厂家:绿色长丝布生态袋,护坡绿化工程专业之选 - 企业推荐官【官方】
  • 2026年质量好的高分子防腐电缆桥架生产商口碑推荐 - 品牌排行榜
  • 新手避坑指南:在eNSP上搞定BGP跨AS通信,为什么你的路由表有黑洞?
  • Moonlight-Switch终极指南:让任天堂Switch免费畅玩PC游戏大作
  • 反向海淘订单状态机设计:taocarts 状态流转与并发控制
  • MuleSoft AI编排实战:企业级LLM集成与治理方法论
  • 华岐|正大|友发|振鸿|焊接钢管批发|四川盛世钢联国际贸易有限公司 - 四川盛世钢联营销中心
  • 干货合集:盘点2026年用户挚爱的一键生成论文工具
  • 2026合肥专业的陪驾公司联系电话及服务参考 - 品牌排行榜
  • 真实无剧本探店|2026静安区黄金回收红黑榜,新手变现直接抄作业 - 沪上贵金属口碑推荐官
  • 深入解析PXD10电源管理模式:从基础原理到低功耗设计实践
  • 深入解析多核DSP MSC8251:架构、优化与高密度通信应用
  • 《LangChain 系列》Human-in-the-loop:什么时候必须让人工介入?
  • 如何让ComfyUI工作流更高效?RGThree-Comfy节点管理工具帮你简化AI图像生成
  • 豆包城市分站怎么玩?大鱼营销带来一套可复用的AI营销思路
  • Kimi K2.6 思考 LeetCode 3260. 找出最大的 N 位 K 回文数 Go实现
  • 寄大件用什么物流便宜?大件快递怎么寄最省钱?教你几招避坑技巧 - 快递物流资讯
  • 2026年工业锅炉市场观察:西南地区主流汽锅炉厂家综合能力评估 - 优质品牌商家
  • 如何快速实现网盘下载加速:免费高效的终极解决方案
  • Matlab图像处理避坑:灰度变换时im2double、uint8这些数据类型转换到底怎么用?
  • Gemini 3.5 Flash vs GPT-4o mini:谁才是最强性价比大模型?
  • 深入解析MSC8251单核DSP SoC架构:从核心、内存到高速数据通路