📜  找到第 K 个最小的奇数回文数(1)

📅  最后修改于: 2023-12-03 15:10:06.186000             🧑  作者: Mango

找到第 K 个最小的奇数回文数

题目描述

给定正整数 K,找到第 K 个最小的奇数回文数。

回文数指正着和倒着读都相同的数字。

示例
输入: K = 1
输出: 1

输入: K = 10
输出: 101
解题思路
  1. 首先,我们需要知道什么是奇数回文数。奇数回文数是以奇数个数字组成的回文数,例如 1、3、5、7、9、11、33、55 等等。

  2. 对于每个奇数 n,我们可以构造一个以它为中心的回文数,例如 11、131、151 等等。可以看出,中心的数字从 1 开始,每次增加 2,直到大于 n。

  3. 我们可以从小到大枚举每个奇数,然后枚举以它为中心的回文数,并将其加入到一个数组中。最后,按照从小到大的顺序返回第 K 个最小的回文数即可。

  4. 由于回文数的位数不确定,我们需要对每个回文数进行判断,直到找到第 K 个奇数回文数为止。

代码实现
def kthPalindrome(k: int) -> int:
    # 用于存储奇数回文数
    palindrome_numbers = []

    # 从 1 开始枚举每个奇数
    for i in range(1, k * 1000, 2):
        # 构造以 i 为中心的回文数
        s = str(i) + str(i)[:-1][::-1]

        # 如果回文数大于 k * 1000,就停止枚举
        if int(s) >= k * 1000:
            break

        # 如果回文数为奇数,就加入到数组中
        if int(s) % 2 == 1:
            palindrome_numbers.append(int(s))

    # 按照从小到大的顺序返回第 k 个最小的奇数回文数
    return sorted(palindrome_numbers)[k - 1]
复杂度分析
  • 时间复杂度:$O(k^2)$
  • 空间复杂度:$O(k)$
总结

本题需要我们对奇数回文数的性质有一定的了解,同时还需要熟悉 Python 字符串的操作。这里给出的解法是比较暴力的,时间复杂度较高,但是仍然可以通过本题。