Find the Closest Palindrome LeetCode solution in C++

1
class Solution {
2
public:
3
string nearestPalindromic(string n) {
4
int l = n.size();
5
set<long> candidates;
6
// biggest, one more digit, 10...01
7
candidates.insert(long(pow(10, l)) + 1);
8
// smallest, one less digit, 9...9 or 0
9
candidates.insert(long(pow(10, l - 1)) - 1);
10
// the closest must be in middle digit +1, 0, -1, then flip left to right
11
long prefix = stol(n.substr(0, (l + 1) / 2));
12
for (long i = -1; i <= 1; ++i) {
13
string p = to_string(prefix + i);
14
string pp = p + string(p.rbegin() + (l & 1), p.rend());
15
candidates.insert(stol(pp));
16
}
17
long num = stol(n), minDiff = LONG_MAX, diff, minVal;
18
candidates.erase(num);
19
for (long val : candidates) {
20
diff = abs(val - num);
21
if (diff < minDiff) {
22
minDiff = diff;
23
minVal = val;
24
} else if (diff == minDiff) {
25
minVal = min(minVal, val);
26
}
27
}
28
return to_string(minVal);
29
}
30
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0