[英]Creating largest integer from numbers in array
我想編寫一個函數來獲取通過在 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 這樣的數字,那么只有其中一個存儲在地圖中。
請幫忙
看起來您可能正在嘗試這樣做?
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
s,因為看起來您想要按字典排序,而不是常規數字排序。
其實我覺得你的第一反應還不錯。 您需要一個包含所有以 9 開頭的參數int[] arr
的數組(例如 9, 90, 91, 92, ... 99, 901, 902, ..., 999),並且所有參數都類似int[] arr
以 8, 7, ... 等開頭。然后需要對每一個進行排序以獲得最好的(999 是最好的,998, ... 990 都比 98 好)。 你走吧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.