LeetCode 564. 寻找最近的回文数
原题链接
困难
作者:
大风大雪
,
2022-03-30 11:10:32
,
所有人可见
,
阅读 293
文字版
typedef long long LL;
class Solution {
public:
string nearestPalindromic(string n) {
int len = n.size();
vector<LL> S;
// 比原来的数少一位 999
S.push_back((LL)pow(10, len - 1) - 1);
// 比原来的数多一位 10001
S.push_back((LL)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 % 2 == 1) S.push_back(stoll(a + b.substr(1)));
else S.push_back(stoll(a + b));
}
// 不包括自身
LL k = stoll(n);
LL res = 1e18 + 7;
for (auto x: S) {
if (x == k) continue;
// 取最小值
if (abs(x - k) == abs(res - k)) {
if (x < res) res = x;
} else if (abs(x - k) < abs(res - k)) res = x;
}
return to_string(res);
}
};