2217. 找到指定长度的回文数
给你一个整数数组 queries 和一个 正 整数 intLength ,请你返回一个数组 answer ,其中 answer[i] 是长度为 intLength 的 正回文数 中第 queries[i] 小的数字,如果不存在这样的回文数,则为 -1 。
回文数 指的是从前往后和从后往前读一模一样的数字。回文数不能有前导 0 。
示例 1:
输入:queries = [1,2,3,4,5,90], intLength = 3
输出:[101,111,121,131,141,999]
解释:
长度为 3 的最小回文数依次是:
101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, ...
第 90 个长度为 3 的回文数是 999 。
示例 2:
输入:queries = [2,4,6], intLength = 4
输出:[1111,1331,1551]
解释:
长度为 4 的前 6 个回文数是:
1001, 1111, 1221, 1331, 1441 和 1551 。
提示:
1 <= queries.length <= 5 * 10**4
1 <= queries[i] <= 109
1 <= intLength <= 15
Python暴力超时解
class Solution:
def kthPalindrome(self, queries: List[int], intLength: int) -> List[int]:
def all_repeat(chars, rno):
results = []
for c in product(chars, repeat=rno):
if c[0] != "0":
results.append(c)
return results
if intLength == 1:
x = [x1 for x1 in range(1,10)]
ans = []
for q in queries:
if q - 1 < len(x):
ans.append(x[q-1])
else:
ans.append(-1)
elif intLength%2 == 1:
x = [str(x1) for x1 in range(0,10)]
y = all_repeat(x,intLength//2)
y = ["".join(list(x)) for x in y]
yx = ["".join(reversed(list(x2))) for x2 in y]
z = []
for j in range(1,10):
for i in range(len(y)):
if y[i][0] == str(j):
for l in range(10):
z.append(int(str(y[i])+str(l)+str(yx[i])))
ans = []
for q in queries:
if q - 1 < len(z):
ans.append(z[q-1])
else:
ans.append(-1)
else:
x = [str(x1) for x1 in range(0,10)]
y = all_repeat(x,intLength//2)
y = ["".join(list(x)) for x in y]
yx = ["".join(reversed(list(x2))) for x2 in y]
z = []
for j in range(1,10):
for i in range(len(y)):
if y[i][0] == str(j):
z.append(int(str(y[i])+str(yx[i])))
ans = []
for q in queries:
if q - 1 < len(z):
ans.append(z[q-1])
else:
ans.append(-1)
return ans
Ruby暴力超时解
# @param {Integer[]} queries
# @param {Integer} int_length
# @return {Integer[]}
def kth_palindrome(queries, int_length)
if int_length%2 == 1
if int_length == 1
c = (1..9).to_a
ans = []
queries.each do |q|
if c[q-1] != nil
ans << c[q-1]
else
ans << -1
end
end
return ans
end
a = [0,1,2,3,4,5,6,7,8,9].repeated_permutation(int_length/2).to_a.select {|it| it[0] != 0}
a = a.map {|it| it.map {|i| i.to_s}.join}
b = a.map {|it| it.reverse}
c = []
for i in 1..9
a.each_with_index do |a1,l|
if a1[0] == i.to_s
for j in 0..9
c.push((a1+j.to_s+b[l]).to_i)
end
end
end
end
ans = []
queries.each do |q|
if c[q-1] != nil
ans << c[q-1]
else
ans << -1
end
end
return ans
else
a = [0,1,2,3,4,5,6,7,8,9].repeated_permutation(int_length/2).to_a.select {|it| it[0] != 0}
a = a.map {|it| it.map {|i| i.to_s}.join}
b = a.map {|it| it.reverse}
c = []
for i in 1..9
a.each_with_index do |a1,l|
if a1[0] == i.to_s
c.push((a1+b[l]).to_i)
end
end
end
ans = []
queries.each do |q|
if c[q-1] != nil
ans << c[q-1]
else
ans << -1
end
end
ans
end
end