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

发布时间:2026/6/16 0:19:57
Kimi K2.6 思考    LeetCode 3260. 找出最大的 N 位 K 回文数 Go实现
以下是 LeetCode 3260 找出最大的 N 位 K 回文数 的 Go 实现基于 k 的分类讨论规律解法时间复杂度 O(n)空间复杂度 O(n)返回结果字符串。gopackage mainimport stringsfunc largestPalindrome(n int, k int) string {switch k {case 1, 3, 9:// 全9即可被 1/3/9 整除return strings.Repeat(9, n)case 2:// 末位需为偶数取最大偶数8首位也需为8回文if n 2 {return strings.Repeat(8, n)}return 8 strings.Repeat(9, n-2) 8case 4:// 末两位需被4整除88是最大满足条件的两位if n 4 {return strings.Repeat(8, n)}return 88 strings.Repeat(9, n-4) 88case 5:// 末位需为0或5取5不能前导零if n 2 {return strings.Repeat(5, n)}return 5 strings.Repeat(9, n-2) 5case 6:// 需同时满足被2和被3整除if n 2 {return strings.Repeat(6, n)}if n%2 1 {// 奇数位: 8...8...8中间8保证数字和为3的倍数l : n/2 - 1return 8 strings.Repeat(9, l) 8 strings.Repeat(9, l) 8}// 偶数位: 中间两位取77使数字和为3的倍数l : n/2 - 2return 8 strings.Repeat(9, l) 77 strings.Repeat(9, l) 8case 7:// k7 的规律较复杂按 n%12 分类讨论if n 2 {return strings.Repeat(7, n)}mod : n % 12switch mod {case 0, 6:return strings.Repeat(9, n)case 3:res : make([]byte, n)for i : range res {res[i] 9}res[n/2] 5return string(res)case 9:res : make([]byte, n)for i : range res {res[i] 9}res[n/2] 6return string(res)case 1, 2, 4, 5:res : make([]byte, n)for i : range res {res[i] 7}for i, j : 0, n-1; i1 j; i, j i1, j-1 {res[i] 9res[j] 9}return string(res)case 7, 8, 10, 11:res : make([]byte, n)for i : range res {res[i] 4}for i, j : 0, n-1; i1 j; i, j i1, j-1 {res[i] 9res[j] 9}return string(res)}case 8:// 末三位需被8整除888是最大满足条件的三位if n 6 {return strings.Repeat(8, n)}return 888 strings.Repeat(9, n-6) 888}return }核心思路说明由于 k ≤ 9可以对每个 k 值利用整除规则和回文约束分别找规律k 关键规则 构造方式1, 3, 9 数字和是3/9的倍数 全 92 末位偶数 首尾 8中间全 94 末两位被4整除 前两位和末两位 88中间全 95 末位0或5 首尾 5中间全 96 被2且被3整除 奇数8...8...8偶数中间 777 无简单规则 按 n % 12 分类共6种子情况8 末三位被8整除 前三位和末三位 888中间全 9复杂度分析- 时间复杂度: O(n) — 主要是 strings.Repeat 和 make([]byte, n) 的字符串构造- 空间复杂度: O(n) — 返回结果字符串所需空间这种方法比通用的 DP 解法O(nk) 时间更简洁高效充分利用了 k ≤ 9 的题目约束。