📅  最后修改于: 2023-12-03 15:10:06.186000             🧑  作者: Mango
给定正整数 K,找到第 K 个最小的奇数回文数。
回文数指正着和倒着读都相同的数字。
输入: K = 1
输出: 1
输入: K = 10
输出: 101
首先,我们需要知道什么是奇数回文数。奇数回文数是以奇数个数字组成的回文数,例如 1、3、5、7、9、11、33、55 等等。
对于每个奇数 n,我们可以构造一个以它为中心的回文数,例如 11、131、151 等等。可以看出,中心的数字从 1 开始,每次增加 2,直到大于 n。
我们可以从小到大枚举每个奇数,然后枚举以它为中心的回文数,并将其加入到一个数组中。最后,按照从小到大的顺序返回第 K 个最小的回文数即可。
由于回文数的位数不确定,我们需要对每个回文数进行判断,直到找到第 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]
本题需要我们对奇数回文数的性质有一定的了解,同时还需要熟悉 Python 字符串的操作。这里给出的解法是比较暴力的,时间复杂度较高,但是仍然可以通过本题。