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 <= 1000 <= digits[i] <= 9class Solution {
public int[] findEvenNumbers(int[] digits) {
int count[] = new int[10];
List<Integer> ans = new ArrayList<>();
for (int d : digits)
count[d]++;
for (int i = 1; i < 10; i++) {
if (count[i] == 0)
continue;
--count[i];
for (int j = 0; j < 10; j++) {
if (count[j] == 0)
continue;
--count[j];
for (int k = 0; k < 10; k += 2) {
if (count[k] == 0)
continue;
int num = i * 100 + j * 10 + k;
ans.add(num);
}
++count[j];
}
++count[i];
}
return ans.stream().mapToInt(Integer::intValue).toArray();
}
}