Welcome to Subscribe On Youtube
1999. Smallest Greater Multiple Made of Two Digits
Description
Given three integers, k
, digit1
, and digit2
, you want to find the smallest integer that is:
- Larger than
k
, - A multiple of
k
, and - Comprised of only the digits
digit1
and/ordigit2
.
Return the smallest such integer. If no such integer exists or the integer exceeds the limit of a signed 32-bit integer (231 - 1
), return -1
.
Example 1:
Input: k = 2, digit1 = 0, digit2 = 2 Output: 20 Explanation: 20 is the first integer larger than 2, a multiple of 2, and comprised of only the digits 0 and/or 2.
Example 2:
Input: k = 3, digit1 = 4, digit2 = 2 Output: 24 Explanation: 24 is the first integer larger than 3, a multiple of 3, and comprised of only the digits 4 and/or 2.
Example 3:
Input: k = 2, digit1 = 0, digit2 = 0 Output: -1 Explanation: No integer meets the requirements so return -1.
Constraints:
1 <= k <= 1000
0 <= digit1 <= 9
0 <= digit2 <= 9
Solutions
-
class Solution { public int findInteger(int k, int digit1, int digit2) { if (digit1 == 0 && digit2 == 0) { return -1; } if (digit1 > digit2) { return findInteger(k, digit2, digit1); } Deque<Long> q = new ArrayDeque<>(); q.offer(0L); while (true) { long x = q.poll(); if (x > Integer.MAX_VALUE) { return -1; } if (x > k && x % k == 0) { return (int) x; } q.offer(x * 10 + digit1); if (digit1 != digit2) { q.offer(x * 10 + digit2); } } } }
-
class Solution { public: int findInteger(int k, int digit1, int digit2) { if (digit1 == 0 && digit2 == 0) { return -1; } if (digit1 > digit2) { swap(digit1, digit2); } queue<long long> q{ {0} }; while (1) { long long x = q.front(); q.pop(); if (x > INT_MAX) { return -1; } if (x > k && x % k == 0) { return x; } q.emplace(x * 10 + digit1); if (digit1 != digit2) { q.emplace(x * 10 + digit2); } } } };
-
class Solution: def findInteger(self, k: int, digit1: int, digit2: int) -> int: if digit1 == 0 and digit2 == 0: return -1 if digit1 > digit2: return self.findInteger(k, digit2, digit1) q = deque([0]) while 1: x = q.popleft() if x > 2**31 - 1: return -1 if x > k and x % k == 0: return x q.append(x * 10 + digit1) if digit1 != digit2: q.append(x * 10 + digit2)
-
func findInteger(k int, digit1 int, digit2 int) int { if digit1 == 0 && digit2 == 0 { return -1 } if digit1 > digit2 { digit1, digit2 = digit2, digit1 } q := []int{0} for { x := q[0] q = q[1:] if x > math.MaxInt32 { return -1 } if x > k && x%k == 0 { return x } q = append(q, x*10+digit1) if digit1 != digit2 { q = append(q, x*10+digit2) } } }