[
math
queue
]
Leetcode 1999 Smallest Greater Multiple Made of Two Digits
Problem statement
https://leetcode.com/problems/smallest-greater-multiple-made-of-two-digits/
Solution
One of the ways to solve this problem is to use queue, where each time we extract number x and add numbers x*10 + d1 and x*10 + d2. Be careful to add only bigger number then we have, for example if x = 0 and d1 = 0, we do not add 0 again. First time when we have number divisible by k, we return it. If we did not found it, return -1
Complexity
Time complexity is O(2^m), where m is maximum number of digits we can have. Space complexity is the same.
Code
class Solution:
def findInteger(self, k, d1, d2):
q = deque([0])
cands = sorted(set([d1, d2]))
while q:
num = q.popleft()
if num > k and num % k == 0: return num
if num >= 2**31: return -1
for cand in cands:
if num*10 + cand != num:
q.append(num*10 + cand)
return -1