LC564-寻找最近的回文数


564. 寻找最近的回文数

回文数的前一半确定则整体确定。

对于ABCDEF而言,考虑五种情况:

  • ABCCBA
  • (ABC - 1)(…),为10…01时,\(10^{len - 1} - 1\);
  • (ABC+ 1)(…),为99…9时,\(10^{len} + 1\)

考虑一个集合S,放入五种情况的值,挑出符合题意的答案即可。

using ll = long long;
class Solution {
public:
    string nearestPalindromic(string n) {
        int len = n.size();
        setS;
        S.insert(1ll*pow(10,len) + 1);
        S.insert(1ll*pow(10,len - 1) - 1);
        ll m = stoll(n.substr(0, (len + 1) / 2));
        for(ll i = m - 1; i <= m + 1; i ++){
            string a = to_string(i), b = a;
            reverse(b.begin(), b.end());
            if(len & 1) S.insert(stoll(a + b.substr(1)));
            else S.insert(stoll(a + b)); 
        }
        
        S.erase(stoll(n));
        ll res = 2e18, k = stoll(n);
        for(auto x : S){
            if(abs(x - k) < abs(res - k))
                res = x;
        }

        return to_string(res);
    }
};

相关