Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
这道题还是有一定难度的,关键在于你要对数字怎么排序,后来我想到一个好办法:
比如85和859谁放在前面后呢?
让85859和85985比一下,也就是说
compare(int a,int b){
return Long.parseLong(a+""+b)- Long.parseLong(a+""+b);
}
所以其他的就简单啦~
package testAndfun; import java.util.Arrays; import java.util.Comparator; public class largestNumber { public static void main(String[] args) { largestNumber ln = new largestNumber(); int[] in = { 3, 2, 54, 9, 85, 859, 99 }; // sortNum(in); System.out.println(ln.biggestNumber(in)); } // 按自定义规则排序 public static void sortNum(int[] a) { int temp = 0; for (int i = a.length - 1; i > 0; --i) { for (int j = 0; j < i; ++j) { if (compare(a[j+1],a[j])<0) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } // 输出 public String biggestNumber(int[] num) { String output = new String(); sortNum(num); for (int i = num.length-1; i >= 0; i--) { output += num[i] + ""; } if(output.length()>1 && output.charAt(0)=='0') return 0+""; return output; } // 排序规则 public static int compare(int o1, int o2) { String s1 = o1 + "" + o2; String s2 = o2 + "" + o1; return (int) (Long.parseLong(s1) - Long.parseLong(s2)); } }
原文地址:http://blog.csdn.net/qbt4juik/article/details/42779919