Easy
You are given an integer array digits
, where each element is a digit. The array may contain duplicates.
You need to find all the unique integers that follow the given requirements:
digits
in any arbitrary order.For example, if the given digits
were [1, 2, 3]
, integers 132
and 312
follow the requirements.
Return a sorted array of the unique integers.
Example 1:
Input: digits = [2,1,3,0]
Output: [102,120,130,132,210,230,302,310,312,320]
Explanation: All the possible integers that follow the requirements are in the output array.
Notice that there are no odd integers or integers with leading zeros.
Example 2:
Input: digits = [2,2,8,8,2]
Output: [222,228,282,288,822,828,882]
Explanation: The same digit can be used as many times as it appears in digits.
In this example, the digit 8 is used twice each time in 288, 828, and 882.
Example 3:
Input: digits = [3,7,5]
Output: []
Explanation: No even integers can be formed using the given digits.
Constraints:
3 <= digits.length <= 100
0 <= digits[i] <= 9
@Suppress("NAME_SHADOWING")
class Solution {
fun findEvenNumbers(digits: IntArray): IntArray {
val idx = IntArray(1)
val result = IntArray(9 * 10 * 5)
val digitMap = IntArray(10)
for (digit in digits) {
digitMap[digit]++
}
dfs(result, digitMap, idx, 0)
return result.copyOfRange(0, idx[0])
}
private fun dfs(result: IntArray, digitMap: IntArray, idx: IntArray, `val`: Int) {
var `val` = `val`
if (`val` > 99) {
result[idx[0]++] = `val`
return
}
`val` *= 10
for (i in 0..9) {
if (digitMap[i] == 0 || `val` == 0 && i == 0 || `val` > 99 && i and 1 == 1) {
continue
}
digitMap[i]--
`val` += i
dfs(result, digitMap, idx, `val`)
`val` -= i
digitMap[i]++
}
}
}