簡體   English   中英

從數組中的數字創建最大整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM