本文共 1106 字,大约阅读时间需要 3 分钟。
数组
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。
本题实际上希望我们找到一个排序规则,数组根据这个排序规则进行重排之后可以连成一个最小的数字。要确定这样的排序规则,也就是对于两个数字 m 和 n,通过一个规则确定哪个应排在前面。
根据题目要求,我们可以发现,两个数字 m 和 n 能拼接成 mn 和 nm,如果 mn<nm,那 m 应该在前;如果 nm<mn,那么 n 应该在前。因此,我们得到的排序规则如下:
根据上述规则,我们需要先把数字转换成字符串再进行比较,因为需要拼接起来。比较完之后按顺序连接成一个字符串即可。
public class Solution { public String PrintMinNumber(int[] numbers) { String result = ""; String[] str = new String[numbers.length]; // 将整数数组转换为字符串数组 for (int i = 0; i < numbers.length; i++) { str[i] = String.valueOf(numbers[i]); } // 对字符串数组进行排序 Arrays.sort(str, new Comparator() { @Override public int compare(String m, String n) { String mn = m + n; String nm = n + m; return mn.compareTo(nm); } }); // 最后拼接成一个字符串 for (String s : str) { result += s; } return result; }}
转载地址:http://hbjvb.baihongyu.com/