LintCode:M-最大数

xiaoxiao2021-02-28  111

LintCode链接

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

 注意事项

最后的结果可能很大,所以我们返回一个字符串来代替这个整数。

您在真实的面试中是否遇到过这个题?  Yes 样例

给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。

public class Solution { /* * @param nums: A list of non negative integers * @return: A string */ public String largestNumber(int[] nums) { Comparator<Integer> cmpr = new Comparator<Integer>(){ public int compare(Integer a, Integer b){ String sa = a+""; String sb = b+""; if(sa.length()==sb.length()){ if(a==b) return 0; return a>b?1:-1; } //保证a长度比b小 if(sa.length()>sb.length()) return -1*compare(b, a); //取公共的部分比较 int ta = a; int tb = Integer.valueOf(sb.substring(0, sa.length())); if(ta==tb){ tb = Integer.valueOf(sb.substring(sa.length(), sb.length())); //tb剩余部分再与ta比较 return compare(ta, tb); }else{ return ta>tb?1:-1; } } }; Integer[] numss = new Integer[nums.length]; for(int i=0; i<nums.length; i++) { numss[i] = nums[i]; } Arrays.sort(numss, cmpr);//sort比较器类型必须和数组的一致,否则报错 //0的特殊处理 if(numss[numss.length-1]==0) return "0"; StringBuffer res = new StringBuffer(""); for(int i=numss.length-1; i>=0; i--){ res.append(numss[i]); } return res.toString(); } }

转载请注明原文地址: https://www.6miu.com/read-39467.html

最新回复(0)