564. 尋找最近的迴文數
給定一個整數 n ,你需要找到與它最近的迴文數(不包括自身)。
“最近的”定義為兩個整數差的絕對值最小。
示例 1:
輸入: "123" 輸出: "121"
注意:
- n 是由字串表示的正整數,其長度不超過18。
- 如果有多個結果,返回最小的那個。
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);
}
};