Lintcode算法
程序员文章站
2022-05-05 16:30:13
题目: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。 思路:直接交换两个数,然后判断交换之后的大小,并根据交换之后的结果,对数组进 ......
题目:
给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
样例
给出 [1, 20, 23, 4, 8]
,返回组合最大的整数应为8423201
。
思路:直接交换两个数,然后判断交换之后的大小,并根据交换之后的结果,对数组进行排序,使其从数组的开始到数组的结束,组成的数字的最大。另外因为考虑到,可能会出现数据出现溢出的现象,需要先把整数的数组转化为字符串类型的数组。例如:对于2和23,谁应该排在前边,那么我们就对223和232进行字符串比大小,将组合成结果大的数字的23放在2的前面。
class Solution { /** * @param nums: A list of non negative integers * @return: A string */ public String largestNumber(int[] nums) { // write your code here String[] s=new String[nums.length]; for(int i=0;i<nums.length;++i){ s[i]=Integer.toString(i); } //对字符串数组进行排序 Arrays.sort(s,new Comparator<String>(){ @Override public int compare(String o1, String o2) { //升序是前者减去后者,降序是后者减去前者。因为排序规则,就是结果就是将数组重新排序,能够从头到尾,实现最大值的问题,所以采用降序 return (o2+o1).compareTo(o1+o2); } }); StringBuffer buf=new StringBuffer(); for(String temp:s){ buf.append(temp); } int index=0; String string = buf.toString(); while(index<string.length()&&string.charAt(index)=='0'){ index++; } if(string.length()==0) return "0"; return buf.substring(index); } }
上一篇: 为什么都把青蛙代入成儿子
下一篇: 全是我的