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);
}
};