-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLargestNumFromArray.java
More file actions
48 lines (42 loc) · 991 Bytes
/
LargestNumFromArray.java
File metadata and controls
48 lines (42 loc) · 991 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.Arrays;
public class LargestNumFromArray {
public String generate(int[] nums) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
if (max < nums[i]) {
max = nums[i];
}
}
int maxDigits = 0;
while (max > 0) {
maxDigits++;
max /= 10;
}
int pow = 1;
for (int i = 0; i < maxDigits; i++) {
final int power = pow;
nums = Arrays.stream(nums)
.boxed()
.sorted((a, b) -> getDigit(b, power) - getDigit(a, power))
.mapToInt(p -> p)
.toArray();
pow *= 10;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
sb.append(nums[i]);
}
return sb.toString();
}
int getDigit(int num, int pow) {
if (num < pow) {
return num % (pow / 10);
}
return ((num / pow) % 10);
}
public static void main(String[] args) {
int[] nums = {9, 3, 30, 34, 549};
LargestNumFromArray lnfa = new LargestNumFromArray();
System.out.println(lnfa.generate(nums));
}
}