排列给定数字以形成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