Skip to content

Latest commit

 

History

History
67 lines (49 loc) · 1.62 KB

564-find-the-closest-palindrome.md

File metadata and controls

67 lines (49 loc) · 1.62 KB

给定一个整数 n ,你需要找到与它最近的回文数(不包括自身)。

“最近的”定义为两个整数差的绝对值最小。

示例 1:

输入: "123"
输出: "121"

注意:

  1. n 是由字符串表示的正整数,其长度不超过18。
  2. 如果有多个结果,返回最小的那个。

thinking

code

class Solution:
    def nearestPalindromic(self, n: str) -> str:
        lg, ni = len(n), int(n)

        if ni % (10 ** (lg - 1)) == 0:
            return str(ni - 1)

        if n == '9' * lg:
            return str(ni + 2)

        a = [i for i in n]
        left, right = 0, lg - 1
        flag = True
        while left <= right:
            if flag:
                flag = a[left] == n[right]
            a[right] = n[left]
            left += 1
            right -= 1

        if flag and lg > 0:
            left -= 1
            right += 1
            v = int(a[left]) - 1
            if v == 0 and lg == 2:
                return "9"

            if v < 0:
                if left == right:
                    a[left] = str(v + 2)
                while v < 0 and left >= 1:
                    a[left] = a[right] = '9'
                    left -= 1
                    right += 1
                    v = int(a[left]) - 1

            a[left] = a[right] = str(v)
        return ''.join(a)