Skip to content

Commit a35ec77

Browse files
soles finding3digit evennumbers
1 parent 4d21dca commit a35ec77

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,6 @@
496496
| 2078 | [Two Furthest Houses With Different Colors](https://leetcode.com/problems/two-furthest-houses-with-different-colors) | [![Java](assets/java.png)](src/TwoFurthestHousesWithDifferentColors.java) | |
497497
| 2085 | [Count Common Words With One Occurrence](https://leetcode.com/problems/count-common-words-with-one-occurrence) | [![Java](assets/java.png)](src/CountCommonWordsWithOneOccurrence.java) | |
498498
| 2089 | [Find Target Indices After Sorting Array](https://leetcode.com/problems/find-target-indices-after-sorting-array) | [![Java](assets/java.png)](src/FindTargetIndicesAfterSortingArray.java) | |
499-
| 2094 | [Finding 3-Digit Even Numbers](https://leetcode.com/problems/finding-3-digit-even-numbers) | | |
499+
| 2094 | [Finding 3-Digit Even Numbers](https://leetcode.com/problems/finding-3-digit-even-numbers) | [![Java](assets/java.png)](src/Finding3DigitEvenNumbers.java) | |
500500
| 2099 | [Find Subsequence of Length K With the Largest Sum](https://leetcode.com/problems/find-subsequence-of-length-k-with-the-largest-sum) | | |
501501
| 2103 | [Rings and Rods](https://leetcode.com/problems/rings-and-rods) | | |

src/Finding3DigitEvenNumbers.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// https://leetcode.com/problems/finding-3-digit-even-numbers
2+
// T: O(N)
3+
// S: O(N)
4+
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
public class Finding3DigitEvenNumbers {
11+
public int[] findEvenNumbers(int[] digits) {
12+
final Map<Integer, Integer> frequencies = getFrequency(digits);
13+
final List<Integer> numbers = new ArrayList<>();
14+
for (int number = 100 ; number <= 999 ; number += 2) {
15+
if (canBeFormed(number, frequencies)) {
16+
numbers.add(number);
17+
}
18+
}
19+
return toArray(numbers);
20+
}
21+
22+
private boolean canBeFormed(int number, Map<Integer, Integer> digits) {
23+
final Map<Integer, Integer> numberDigits = getFrequency(number);
24+
for (Map.Entry<Integer, Integer> entry : numberDigits.entrySet()) {
25+
if (digits.getOrDefault(entry.getKey(), 0) < entry.getValue()) {
26+
return false;
27+
}
28+
}
29+
return true;
30+
}
31+
32+
private int[] toArray(List<Integer> list) {
33+
final int[] array = new int[list.size()];
34+
for (int i = 0 ; i < list.size() ; i++) {
35+
array[i] = list.get(i);
36+
}
37+
return array;
38+
}
39+
40+
private Map<Integer, Integer> getFrequency(int[] array) {
41+
final Map<Integer, Integer> frequency = new HashMap<>();
42+
for (int element : array) {
43+
frequency.put(element, frequency.getOrDefault(element, 0) + 1);
44+
}
45+
return frequency;
46+
}
47+
48+
private Map<Integer, Integer> getFrequency(int number) {
49+
final Map<Integer, Integer> frequency = new HashMap<>();
50+
while (number > 0) {
51+
int digit = number % 10;
52+
frequency.put(digit, frequency.getOrDefault(digit, 0) + 1);
53+
number /= 10;
54+
}
55+
return frequency;
56+
}
57+
}

0 commit comments

Comments
 (0)