因为回文数是镜像的。所以对于固定长度为L、第k大的回文数,其实只要求一半长度的第k个自然数即可。更具体地,我们要根据L的奇偶性分情况讨论。
如果L是偶数,那么本题就转换成了求长度为L/2的第k大的自然数。因为长度为L/2的最小自然数是1000...,即1e(L/2-1),所以回文数的左半边是a = 1e(L/2-1) + (k-1)
。再将a镜像得到b,然后 a*1e(L/2)+b
就是最终的答案。
如果L是奇数,那么待求的回文数就是acb的形式。其中b是a的镜像,长度都是L/2;c是一个single digit。于是第k大的回文数,就等价于长度是L/2+1的第k大的自然数,即a = 1e(L/2) + (k-1)
. 然后我们得到c = a % 10
。将a去掉最后一位后,得到其镜像数字为b。最终的答案是a*1e(L/2+1) + c*1e(L/2) + b
。