Skip to content

Commit 52dc19e

Browse files
solves #2231: Largest Number After Digit Swaps by Parity in java
1 parent 57d6a82 commit 52dc19e

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# LeetCode Algorithms
22

3-
![problems-solved](https://img.shields.io/badge/Problems%20Solved-570/2081-1f425f.svg)
3+
![problems-solved](https://img.shields.io/badge/Problems%20Solved-593/2081-1f425f.svg)
44
![problems-solved-java](https://img.shields.io/badge/Java-556/2081-1abc9c.svg)
55
![problems-solved-python](https://img.shields.io/badge/Python-205/2081-1abc9c.svg)
66
![problems-solved-javascript](https://img.shields.io/badge/JavaScript-4/2081-1abc9c.svg)
@@ -725,7 +725,7 @@
725725
| 2220 | [Minimum Bit Flips to Convert Number](https://leetcode.com/problems/minimum-bit-flips-to-convert-number) | [![Java](assets/java.png)](src/MinimumBitFlipsToConvertNumber.java) | |
726726
| 2224 | [Minimum Number of Operations to Convert Time](https://leetcode.com/problems/minimum-number-of-operations-to-convert-time) | [![Java](assets/java.png)](src/MinimumNumberOfOperationsToConvertTime.java) | |
727727
| 2229 | 🔒 [Check if an array is consecutive](https://leetcode.com/problems/check-if-an-array-is-consecutive) | | |
728-
| 2231 | [Largest Number After Digit Swaps by Parity](https://leetcode.com/problems/largest-number-after-digit-swaps-by-parity) | | |
728+
| 2231 | [Largest Number After Digit Swaps by Parity](https://leetcode.com/problems/largest-number-after-digit-swaps-by-parity) | [![Java](assets/java.png)](src/LargestNumberAfterDigitSwapsByParity.java) | |
729729
| 2235 | [Add Two Integers](https://leetcode.com/problems/add-two-integers) | | |
730730
| 2236 | [Root Equals Sum of Children](https://leetcode.com/problems/root-equals-sum-of-children) | | |
731731
| 2239 | [Find Closest Number to Zero](https://leetcode.com/problems/find-closest-number-to-zero) | | |

Diff for: src/LargestNumberAfterDigitSwapsByParity.java

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// https://leetcode.com/problems/largest-number-after-digit-swaps-by-parity
2+
// T: O(log(n) log(log(n)))
3+
// S: O(log(n))
4+
5+
import java.util.ArrayList;
6+
import java.util.Comparator;
7+
import java.util.List;
8+
9+
public class LargestNumberAfterDigitSwapsByParity {
10+
public int largestInteger(int num) {
11+
final String number = num + "";
12+
final List<Integer> evenDigits = getEvenDigits(number);
13+
final List<Integer> oddDigits = getOddDigits(number);
14+
15+
evenDigits.sort(Comparator.reverseOrder());
16+
oddDigits.sort(Comparator.reverseOrder());
17+
18+
final StringBuilder result = new StringBuilder();
19+
for (int i = 0, evenIndex = 0, oddIndex = 0; i < number.length() ; i++) {
20+
if (isOddDigit(number, i)) {
21+
result.append(oddDigits.get(oddIndex++));
22+
} else {
23+
result.append(evenDigits.get(evenIndex++));
24+
}
25+
}
26+
27+
return Integer.parseInt(result.toString());
28+
}
29+
30+
private boolean isOddDigit(String number, int index) {
31+
return (number.charAt(index) - '0') % 2 == 1;
32+
}
33+
34+
private List<Integer> getEvenDigits(String string) {
35+
final List<Integer> result = new ArrayList<>();
36+
for (int index = 0 ; index < string.length() ; index++) {
37+
if (!isOddDigit(string, index)) result.add(string.charAt(index) - '0');
38+
}
39+
return result;
40+
}
41+
42+
private List<Integer> getOddDigits(String string) {
43+
final List<Integer> result = new ArrayList<>();
44+
for (int index = 0 ; index < string.length() ; index++) {
45+
if (isOddDigit(string, index)) result.add(string.charAt(index) - '0');
46+
}
47+
return result;
48+
}
49+
}

0 commit comments

Comments
 (0)