给你一个整数数组 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 * 104
    1 <= queries[i] <= 109
    1 <= intLength <= 15


    1. class Solution {
    2. /**
    3. 拼凑回文数即可,第几小的回文数前半部分就是pow(10, n) + queries[i] - 1, 偶数直接翻转, 奇数需要去掉反转后的第一位
    4. */
    5. public long[] kthPalindrome(int[] queries, int intLength) {
    6. int n = queries.length;
    7. long[] res = new long[n];
    8. Arrays.fill(res, -1);
    9. long start = (long)Math.pow(10, intLength - 1 >> 1);
    10. for (int i = 0; i < n; ++i) {
    11. //大于回文数前半部分的就是不存在的
    12. if (queries[i] <= 9 * start) {
    13. long tem = start + queries[i] - 1;
    14. StringBuilder prefix = new StringBuilder(tem + "");
    15. StringBuilder suffix = new StringBuilder(tem + "");
    16. //奇数就截取反转后的第一位之后的
    17. if ((intLength & 1) == 1) prefix.append(suffix.reverse().substring(1));
    18. else prefix.append(suffix.reverse());
    19. res[i] = Long.parseLong(prefix.toString());
    20. }
    21. }
    22. return res;
    23. }
    24. }