给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解答:
自定义一种排序方法,降序排序,最后将排序后的结果合并
public String largestNumber(int[] nums) { List<String> list = new ArrayList<String>(nums.length); for (int num : nums) { list.add(num + ""); } Collections.sort(list, new Comparator<String>() { @Override public int compare(String arg0, String arg1) { // TODO Auto-generated method stub String merge0 = arg0 + arg1; String merge1 = arg1 + arg0; for (int i = 0; i < merge0.length(); ++i) { char ch0 = merge0.charAt(i); char ch1 = merge1.charAt(i); if (ch0 != ch1) { return ch1 - ch0; } } return 0; } }); if (list.get(0).equals("0")) { // 处理全是0的情况 return "0"; } StringBuilder stringBuilder = new StringBuilder(); for (String value : list) { stringBuilder.append(value); } return stringBuilder.toString(); }
针对int a与int b,可以转换成String后,比较a+b与b+a的大小
注意全是0的处理,结果是0,而不是00000...