Find palindrome with fixed length
class Solution:
def kthPalindrome(self, queries: List[int], intLength: int) -> List[int]:
l = (intLength + 1) // 2 # 可以唯一确定回文数的前半部分的长度
start = 10 ** (l - 1) - 1 # start + k 即为第 k 个 l 位无前导零整数
limit = 10 ** l - 1 # l 位无前导零整数的上界
res = []
# 将前半部分恢复为对应的回文数
def recover(num: int) -> int:
if intLength % 2 == 0:
return int(str(num) + str(num)[::-1])
else:
return int(str(num)[:-1] + str(num)[::-1])
# 依次处理询问
for query in queries:
if start + query > limit:
# 不存在
res.append(-1)
continue
res.append(recover(start + query))
return res
Find Palindrome With Fixed Length
Given an integer array queries and a positive integer intLength, return an array answer where answer[i] is either the queries[i]th smallest positive palindrome of length intLength or -1 if no such palindrome exists.
A palindrome is a number that reads the same backwards and forwards. Palindromes cannot have leading zeros.
Example 1:
Input: queries = [1,2,3,4,5,90], intLength = 3 Output: [101,111,121,131,141,999] Explanation: The first few palindromes of length 3 are: 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, ... The 90th palindrome of length 3 is 999.
Example 2:
Input: queries = [2,4,6], intLength = 4 Output: [1111,1331,1551] Explanation: The first six palindromes of length 4 are: 1001, 1111, 1221, 1331, 1441, and 1551.
Constraints:
1 <= queries.length <= 5 * 1041 <= queries[i] <= 1091 <= intLength <= 15