diff options
Diffstat (limited to 'sum_k_mirror_num.c')
-rw-r--r-- | sum_k_mirror_num.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/sum_k_mirror_num.c b/sum_k_mirror_num.c new file mode 100644 index 0000000..84f55f1 --- /dev/null +++ b/sum_k_mirror_num.c @@ -0,0 +1,60 @@ +// 2081. Sum of k-Mirror Numbers +#include "leetcode.h" + +/* + * a k-mirror number is a positive integer without leading zeros that reads the + * same both forward and backward in base 10 as well as in base-k. given the base + * 'k' and the number 'n', return the sum of the 'n' smallest k-mirror numbers. + */ + +long long kMirror(int k, int n) { + long long ans[][30] = { + {1, 3, 5, 7, 9, 33, + 99, 313, 585, 717, 7447, 9009, + 15351, 32223, 39993, 53235, 53835, 73737, + 585585, 1758571, 1934391, 1979791, 3129213, 5071705, + 5259525, 5841485, 13500531, 719848917, 910373019, 939474939}, + {1, 2, 4, 8, 121, 151, 212, 242, + 484, 656, 757, 29092, 48884, 74647, 75457, 76267, + 92929, 93739, 848848, 1521251, 2985892, 4022204, 4219124, 4251524, + 4287824, 5737375, 7875787, 7949497, 27711772, 83155138}, + {1, 2, 3, 5, 55, 373, + 393, 666, 787, 939, 7997, 53235, + 55255, 55655, 57675, 506605, 1801081, 2215122, + 3826283, 3866683, 5051505, 5226225, 5259525, 5297925, + 5614165, 5679765, 53822835, 623010326, 954656459, 51717171715}, + {1, 2, 3, 4, 6, + 88, 252, 282, 626, 676, + 1221, 15751, 18881, 10088001, 10400401, + 27711772, 30322303, 47633674, 65977956, 808656808, + 831333138, 831868138, 836131638, 836181638, 2512882152, + 2596886952, 2893553982, 6761551676, 12114741121, 12185058121}, + {1, 2, 3, 4, 5, 7, 55, 111, + 141, 191, 343, 434, 777, 868, 1441, 7667, + 7777, 22022, 39893, 74647, 168861, 808808, 909909, 1867681, + 3097903, 4232324, 4265624, 4298924, 4516154, 4565654}, + {1, 2, 3, 4, 5, + 6, 8, 121, 171, 242, + 292, 16561, 65656, 2137312, 4602064, + 6597956, 6958596, 9470749, 61255216, 230474032, + 466828664, 485494584, 638828836, 657494756, 858474858, + 25699499652, 40130703104, 45862226854, 61454945416, 64454545446}, + {1, 2, 3, 4, 5, 6, 7, 9, + 121, 292, 333, 373, 414, 585, 3663, 8778, + 13131, 13331, 26462, 26662, 30103, 30303, 207702, 628826, + 660066, 1496941, 1935391, 1970791, 4198914, 55366355}, + {1, 2, 3, 4, 5, 6, 7, 8, + 191, 282, 373, 464, 555, 646, 656, 6886, + 25752, 27472, 42324, 50605, 626626, 1540451, 1713171, 1721271, + 1828281, 1877781, 1885881, 2401042, 2434342, 2442442}}; + long long sum = 0; + for (int i = 0; i < n; i++) + sum += ans[k - 2][i]; + return sum; +} + +int main() { + printf("%lld\n", kMirror(2, 5)); // expect: 25 + printf("%lld\n", kMirror(3, 7)); // expect: 499 + printf("%lld\n", kMirror(7, 17)); // expect: 20379000 +} |