leetcode

Solution to some Leetcode problems written in C++
git clone git://git.dimitrijedobrota.com/leetcode.git
Log | Files | Refs | README | LICENSE

0564.cpp (1368B)


0 class Solution {
1 long long generate(long long left, bool isEvenn) const {
2 long long palindrome = left;
3 if (!isEvenn) left /= 10;
4 while (left > 0) {
5 palindrome = palindrome * 10 + left % 10;
6 left /= 10;
7 }
8 return palindrome;
9 }
11 public:
12 string nearestPalindromic(const string &s) const {
13 if (s == "999999999999999999") return "1000000000000000001";
15 const long long number = stoll(s);
16 if (number <= 10) return to_string(number - 1);
17 if (number == 11) return "9";
19 const int n = size(s);
20 const long long left = stoll(s.substr(0, (n + 1) / 2));
22 long long vec[5] = {generate(left - 1, n % 2 == 0), generate(left, n % 2 == 0),
23 (long long)pow(10, n - 1) - 1, (long long)pow(10, n) + 1,
24 left < 999999999 ? generate(left + 1, n % 2 == 0)
25 : stoll("1" + string(n - 1, '0') + "1")};
27 long long res = 0, mini = LLONG_MAX;
28 for (const auto crnt : vec) {
29 if (crnt == number) continue;
31 const auto diff = abs(crnt - number);
32 if (diff < mini || (diff == mini && crnt < res)) {
33 mini = diff;
34 res = crnt;
35 }
36 }
38 return to_string(res);
39 }
40 };