File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ long long kMirror(int k, int n) {
4+ long long sum = 0;
5+
6+ for (int len = 1; n > 0; ++len) {
7+ int halfLen = (len + 1) / 2;
8+ long long start = (len == 1) ? 1 : pow10(halfLen - 1);
9+ long long end = pow10(halfLen);
10+
11+ for (long long i = start; i < end && n > 0; ++i) {
12+ long long pal = generatePalindrome(i, len % 2 == 1);
13+ if (isPalindromeInBase(pal, k)) {
14+ sum += pal;
15+ n--;
16+ }
17+ }
18+ }
19+
20+ return sum;
21+ }
22+
23+ // Generate full decimal palindrome from half (mirrored)
24+ long long generatePalindrome(long long half, bool oddLength) {
25+ long long res = half;
26+ if (oddLength) half /= 10;
27+ while (half > 0) {
28+ res = res * 10 + (half % 10);
29+ half /= 10;
30+ }
31+ return res;
32+ }
33+
34+ // Check if number is palindrome in base k
35+ bool isPalindromeInBase(long long num, int base) {
36+ vector<int> digits;
37+ while (num > 0) {
38+ digits.push_back(num % base);
39+ num /= base;
40+ }
41+ for (int i = 0, j = digits.size() - 1; i < j; ++i, --j) {
42+ if (digits[i] != digits[j]) return false;
43+ }
44+ return true;
45+ }
46+
47+ // Avoid pow usage with int return
48+ long long pow10(int exp) {
49+ long long res = 1;
50+ while (exp--) res *= 10;
51+ return res;
52+ }
53+ };
You can’t perform that action at this time.
0 commit comments