patternjavaModerate
Rearranging numbers to get the largest number
Viewed 0 times
therearrangingnumbernumberslargestget
Problem
Given a Integer, find the maximum number that can be formed from the digits.
Is there any optimization or anything I can improve here?
- Input: 8754365
- Output: 8765543
private static int largestNumber(int data) {
int num = data;
int[] times = new int[10];
while (num != 0) {
if (num == 0) {
break;
}
int val = num % 10;
times[val]++;
num /= 10;
}
String largestNumber = "";
for (int i = 9; i >= 0; i--) {
for (int j = 0; j < times[i]; j++) {
largestNumber += i;
}
}
return Integer.parseInt(largestNumber);
}Is there any optimization or anything I can improve here?
Solution
while (num != 0) {
if (num == 0) {
break;
}That
if is redundant and can be removed.Using a
StringBuilder for largestNumber is roughly twice as fast on my machine.Avoiding strings altogether is faster still:
int largestNumber = 0;
for (int i = 9; i >= 0; i--) {
for (int j = 0; j < times[i]; j++) {
largestNumber = largestNumber * 10 + i;
}
}
return largestNumber;You might want to return a
long instead of an int so that, for example, largestNumber(Integer.MAX_VALUE) returns 8776444321, as expected.Code Snippets
while (num != 0) {
if (num == 0) {
break;
}int largestNumber = 0;
for (int i = 9; i >= 0; i--) {
for (int j = 0; j < times[i]; j++) {
largestNumber = largestNumber * 10 + i;
}
}
return largestNumber;Context
StackExchange Code Review Q#92022, answer score: 14
Revisions (0)
No revisions yet.