排列给定数字以形成Java中最大的数字

时间:2020-01-09 10:35:22  来源:igfitidea点击:

在这篇文章中,我们将看到如何编写Java程序来排列给定的非负数以形成最大数。例如,如果有一个数字数组{45,3,89,123},则这些数字应排列为89453123以形成最大的数字。如果整数数组为{5,6,50,4},则这些数字应安排为65504.

排列数字以形成最大的数字解决方案

如果将给定的数字作为整数进行比较,以降序排列它们,那么对于数字6和50,我们将得到数字506,因为50大于6. 因此这种方法行不通。

如果将整数转换为String,然后进行比较,则可以按要求的顺序获取数字。发生这种情况是因为String比较是按字典顺序或者字母顺序进行的。按照词典顺序,如果比较两个字符串以确定哪个更大,则逐个字符进行比较,并且这些字符串不同的第一个字符确定顺序。例如,如果比较" Any"和" Amy"以降序排列,则顺序是" Any",然后" Amy",因为n在m之后。
如果将数字与字符串进行比较,则在以" 6"和" 50"进行比较时,其顺序为6,则50以6的形式出现在5之后。

作为额外的预防措施,我们还需要在比较之前将第一个数字添加到第二个,并将第二个添加到第一个。例如,如果我们有两个数字A和B,则将AB和BA进行比较(在数字后面加上数字)。这对于" 5"和" 50"这样的字符串是必需的,在比较中,比较将首先放置" 50",然后放置" 5"。通过添加,我们将不会遇到此问题。

Java程序将给定数字排列成最大数字

public class ArrangeNumbers {
  public static void main(String[] args) {
    List<Integer> listOfNumbers = Arrays.asList(11, 10, 9, 99, 98);  
    Collections.sort(listOfNumbers, new MyComparator());
    System.out.println("Biggest number is-");
    // Biggest number
    for(Integer i : listOfNumbers){
     System.out.print(i);
    }
  }
}
// Custom comparator for comparison
class MyComparator implements Comparator<Integer>{
  @Override
  public int compare(Integer i, Integer j) {
    // Appending before comparison
    String str1 = i.toString() + j.toString();
    String str2 = j.toString() + i.toString();
    return str2.compareTo(str1);
  }
}

输出量

Biggest number is-
999981110