1. 程式人生 > >564. 尋找最近的迴文數

564. 尋找最近的迴文數

給定一個整數 n ,你需要找到與它最近的迴文數(不包括自身)。

“最近的”定義為兩個整數差的絕對值最小。

示例 1:

輸入: "123"
輸出: "121"

注意:

  1. 是由字串表示的正整數,其長度不超過18。
  2. 如果有多個結果,返回最小的那個。

class Solution {
public:
    string nearestPalindromic(string n) {
        long len = n.size(), num = stol(n), res, minDiff = LONG_MAX;
        unordered_set<long> s;
        s.insert(pow(10, len) + 1);
        s.insert(pow(10, len - 1) - 1);
        long prefix = stol(n.substr(0, (len + 1) / 2));
        for (long i = -1; i <= 1; ++i) {
            string pre = to_string(prefix + i);
            string str = pre + string(pre.rbegin() + (len & 1), pre.rend());
            s.insert(stol(str));
        }
        s.erase(num);
        for (auto a : s) {
            long diff = abs(a - num);
            if (diff < minDiff) {
                minDiff = diff;
                res = a;
            } else if (diff == minDiff) {
                res = min(res, a);
            }
        }
        return to_string(res);
    }
};