从数组中的数字创建最大整数

时间:2014-04-09 20:17:12

标签: java arrays

我想编写一个函数来获取通过在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中。

请帮忙

2 个答案:

答案 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好)。 你离开了。