我想编写一个函数来获取通过在int数组中附加数字而形成的最大数字
String makeLargestNo(int[] arr);
static String makeLargestNo(int[] arr){
int length = arr.length;
StringBuilder sb = new StringBuilder();
TreeMap<String, String> tm = new TreeMap<String, String>();
for(int i = 0; i < length; i++){
int n = arr[i];
while( n > 10){
n = n / 10;
}
tm.put(String.valueOf(n), String.valueOf(arr[i]));
}
ArrayList<String> keys = new ArrayList<String>(tm.keySet());
for(int i = keys.size() - 1; i >= 0; i--){
sb.append(tm.get(keys.get(i)));
}
return sb.toString();
}
但后来我发现如果param数组有98和92这样的数字,那么其中只有一个存储在map中。
请帮忙
答案 0 :(得分:0)
看起来你可能正在尝试这样做吗?
public static String makeLargestNo(int[] arr) {
List<String> elements = new ArrayList<String>();
for (int i = 0; i < arr.length; i++) {
int n = arr[i];
//while(n>10){
// n=n/10;
//}
elements.add(String.valueOf(n));
}
Collections.sort(elements);
StringBuilder sb = new StringBuilder();
for (int i = elements.length - 1; i >= 0; i--) {
sb.append(elements.get(i));
}
return sb.toString();
}
这是你想要做的吗?
或者,如果您想要一个号码,请制作方法
public static Number makeLargestNo(int[] arr);
和return new BigDecimal(sb.toString());
或类似的东西。
编辑:
根据您在评论中的澄清,听起来您根本不想要while
循环。我在上面的代码中对此进行了评论。
此外,我已将List
更改为包含String
,因为您看起来想要一个字典排序,而不是常规的数字排序。
答案 1 :(得分:0)
实际上,我认为你的第一反应并不是那么糟糕。
你想要一个以9开头的所有参数int[] arr
的数组(例如9,90,91,92,... 99,901,902,...,999),以及所有参数的类似{ {1}}以8,7开头......等
然后每个都需要进行最佳排序(999最好,998,... 990都比98好)。
你离开了。