【发布时间】:2019-05-16 07:08:36
【问题描述】:
问题陈述: 我在 Java 中有一个字符串形式的非负数数组,我想排列整数以形成最大可能的数字。
示例:给出以下输入:
String[] numbers = {"15", "9", "62", "34"};
排列“9623415”给出了最大的数字。
注意:我知道我们可以按降序对所有数字进行排序,但简单的排序是行不通的。例如,15 按自然顺序大于 9,但在解决方案中“9”排在“15”之前。在这种情况下,实现自定义比较器的最佳方式是什么?
任何帮助将不胜感激。
【问题讨论】:
-
把它们变成字符串,然后排序,然后连接。
-
@Thilo 它们已经是字符串,这使它变得微不足道...
-
基本上,
Arrays.stream(numbers).sorted().collect(Collectors.joining(""))。 -
在您的比较器中,您需要根据应该足以解决此问题的第一个数字/字符进行比较。 public int compare(String s1,String s2){ return (s1.charAt(0)-s2.charAt(0));让我们在这里举同样的例子——我们有“15”、“9”、“62”、“34”,现在根据数组元素的第一个数字对这个字符串进行排序,那么顺序将是 9> 6>3>1现在根据上面提到的第一个字符串以相同的顺序排列字符串 - “9”,“62”,“34”,“15”,最后,附加将成为您的结果的字符串。
-
@Kanahaiya:下次发个答案就行了。
标签: java arrays algorithm sorting