千问 LeetCode 2081.K 镜像数字的和 TypeScript实现
这是一道结合了回文数构造和进制转换的题目。 核心思路题目目标找到最小的 n 个正整数使得它们在十进制下是回文数且在 k 进制下也是回文数。最后返回这些数的和。解题策略暴力枚举不可行如果从 1 开始逐个判断效率太低因为回文数很稀疏。构造回文数我们应该直接生成十进制下的回文数从小到大。生成方法通过枚举回文数的左半部分来生成完整的回文数。例如左半部分是 12可以生成奇数长度回文 121中间加一位或偶数长度回文 1221直接拼接反转。验证对生成的每个十进制回文数将其转换为 k 进制检查是否也是回文。算法流程从长度为 1 的数字开始1-9生成长度为 len 的所有回文数。对于每个生成的回文数检查其 k 进制形式是否为回文。如果是累加到结果中计数器加一。当找到 n 个满足条件的数时返回总和。 TypeScript 代码实现function kMirror(k: number, n: number): number {let sum 0;let count 0;// 从长度为 1 的回文数开始逐步增加长度 for (let len 1; count 0) { kBaseStr (n % k).toString(); n Math.floor(n / k); } // 检查是否是回文 return kBaseStr kBaseStr.split().reverse().join();}⚡ 优化版本更高效的回文生成function kMirror(k: number, n: number): number {let sum 0;let count 0;// 从长度为1的回文数开始 for (let len 1; count 0) { kBaseStr (n % k).toString(); n Math.floor(n / k); } return kBaseStr kBaseStr.split().reverse().join();} 复杂度分析时间复杂度主要取决于需要检查多少个十进制回文数才能找到 n 个 k 进制回文数。生成回文数的效率远高于暴力遍历。空间复杂度O(log N)用于存储进制转换的字符串。 关键点主动生成回文数比暴力遍历高效得多。双重回文检查先检查十进制回文再检查 k 进制回文。提前终止找到 n 个就立即返回。