Description
You are given two positive integers n
and k
.
An integer x
is called k-palindromic if:
x
is a palindrome.x
is divisible byk
.
An integer is called good if its digits can be rearranged to form a k-palindromic integer. For example, for k = 2
, 2020 can be rearranged to form the k-palindromic integer 2002, whereas 1010 cannot be rearranged to form a k-palindromic integer.
Return the count of good integers containing n
digits.
Note that any integer must not have leading zeros, neither before nor after rearrangement. For example, 1010 cannot be rearranged to form 101.
Β
Example 1:
Input: n = 3, k = 5
Output: 27
Explanation:
Some of the good integers are:
- 551 because it can be rearranged to form 515.
- 525 because it is already k-palindromic.
Example 2:
Input: n = 1, k = 4
Output: 2
Explanation:
The two good integers are 4 and 8.
Example 3:
Input: n = 5, k = 6
Output: 2468
Β
Constraints:
1 <= n <= 10
1 <= k <= 9
Solution
Python3
class Solution:
def countGoodIntegers(self, n: int, k: int) -> int:
n2 = (n + 1) // 2
res = 0
seen = set()
for v in range(10 ** (n2 - 1), 10 ** n2):
vv = str(v) + str(v)[::-1][n % 2:]
key = ''.join(sorted(vv))
if int(vv) % k == 0 and key not in seen:
seen.add(key)
count = Counter(vv)
x = (n - count['0']) * factorial(n - 1)
for i,c in count.items():
x //= factorial(c)
res += x
return res