leetcode--179:Largest Number

题目:          Given a list of non negative integers, arrange them such that they form the largest number.

例子:          给定由非负整数组成的数组[3, 30, 34, 5, 9], 它们所组成的最大整数为: 9534330.

第一眼看到这题目,脑中闪现的思路就是:先找出各个数的首位数字,然后从大到小排序,首位数字相同再比较第二位数字的大小,写了一段时间后,发现写不下去了,因为当两个数的前几位数字相同时,还得考虑多出来的那位数字的大小问题,比如 

121,12   组成12121,

122,12组成12212,                    即多出来的那位数字必须大于最后一位相同的数字,感觉走不下去了。

于是决定转换思路:从最后的结果来看,它是通过对原来的数组中的元素进行调换顺序后,顺序输出得出的。 两个元素调换顺序的规则是:比较两个元素在不同顺序下所组成的数的大小。比如两个数:a,b ,需要比较数ab和ba的大小。

因此就有了下面的代码(java):

public class Solution {  
      public String largestNumber(int[] arr) {  
        String[] strs = new String[arr.length];  
          
        for(int i=0; i<arr.length; i++) {  
            strs[i] = Integer.toString(arr[i]);  
        }  
          
        Arrays.sort(strs, new Comparator<String>() {  
            @Override  
            public int compare(String s1, String s2) {  
                String ss1 = s1 + s2;  
                String ss2 = s2 + s1;  
                int i=0;  
                while(i<ss1.length()) {  
                    if(ss1.charAt(i)!=ss2.charAt(i)) {  
                        return ss1.charAt(i) - ss2.charAt(i);  
                    }  
                    ++i;  
                }  
                return 0;  
            }  
        }  
                );  
          
        StringBuilder sb = new StringBuilder();  
        for(int i=strs.length-1; i>=0; i--) {  
            sb.append(strs[i]);  
        }  
          
        return sb.toString().replaceFirst("^0+(?!$)", "");    
    }  
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值