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
import java.util.Arrays;
public class Solution {
public int[] findEvenNumbers(int[] digits) {
int[] idx = new int[1];
int[] result = new int[9 * 10 * 5];
int[] digitMap = new int[10];
for (int digit : digits) {
digitMap[digit]++;
}
dfs(result, digitMap, idx, 0);
return Arrays.copyOfRange(result, 0, idx[0]);
}
private void dfs(int[] result, int[] digitMap, int[] idx, int val) {
if (val > 99) {
result[idx[0]++] = val;
return;
}
val *= 10;
for (int i = 0; i < 10; i++) {
if (digitMap[i] == 0 || (val == 0 && i == 0) || (val > 99 && (i & 1) == 1)) {
continue;
}
digitMap[i]--;
val += i;
dfs(result, digitMap, idx, val);
val -= i;
digitMap[i]++;
}
}
}