本文主要是介绍《leetCode》:Largest Number,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
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.
思路
找出组合中的最大数,最简单的思路就是:找出这些的全排列,然后取出最大值,但是这样的时间复杂度为n!。另外一种思路就是将这些数字对应的字符串进行排序(注意这里的排序并不是根据字符本身的比较进行排序,而是组合的排序),最后组合起来就可以了。
public String largestNumber(int[] nums) {if(nums==null||nums.length<1){return null;}//排序int len=nums.length;String [] strs=new String[len];for(int i=0;i<len;i++){strs[i]=Integer.toString(nums[i]);}Arrays.sort(strs, new Comparator<String>(){@Overridepublic int compare(String str1, String str2) {StringBuilder sb=new StringBuilder();StringBuilder sb2=new StringBuilder();sb.append(str1).append(str2);sb2.append(str2).append(str1); return sb.toString().compareTo(sb2.toString());}});//将排序后的结果组合起来就好if(strs[len-1].charAt(0)=='0'){//如果最高位都为0,则返回0return "0";}StringBuffer sb=new StringBuffer();for(int i=len-1;i>=0;i--){sb.append(strs[i]);}return sb.toString();}
这篇关于《leetCode》:Largest Number的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!