179.最大数 (排序)

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:
输入: [10,2]
输出: 210

示例 2:
输入: [3,30,34,5,9]
输出: 9534330

说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。

1.写了一晚上的排序函数,8 和 883没通过,改了之后提交12和121没通过,后来都通过了,就剩下一个测试用例,mad,然后看了一眼评论,原来比较一下s1+s2和s2+s1就可以了,仙女落泪

String.compareTo()//字符串比较
String.valueOf(int[])//int转string

class Solution {
    public String largestNumber(int[] nums) {
        ArrayList<String> array = new ArrayList<>();
        for(int i = 0; i < nums.length; i++){
            String str = String.valueOf(nums[i]);
            // char[] ch = str.toCharArray(); //一开始理解错了题
            // for(char c : ch){
            //     array.add(c);
            // }
            array.add(str);
        }
//         Collections.sort(array, new Comparator<String>() { //狂写排序还是没通过,哈,哈,哈
//             @Override
//             public int compare(String o1, String o2) {
//                 int len1 = o1.length();
//                 int len2 = o2.length();
//                 if(len1 < len2){
// //                    for(int i = 0; i < len1; i++){
// //                        if(o1.charAt(i) != o2.charAt(i)){
// //                            return o2.charAt(i)-o1.charAt(i);
// //                        }
// //                    }
//                     int i,t=0;
//                     for( i = 0; i<len2/len1;i++){
//                         if(o2.substring(len1*i, len1*i+len1).compareTo(o1)==0){
//                             continue;
//                         }
//                         return o2.substring(len1*i, len1*i+len1).compareTo(o1);
//                     }
//                     for(int j = len1*i;j <len2;j++){
//                         if(o1.charAt(t) != o2.charAt(j)){
//                             return o2.charAt(j)-o1.charAt(t++);
//                         }
//                     }
//                     // return o2.charAt(len2-1)-o1.charAt(++t);
//                     return len1-len2;
// //                    return o2.substring(len1, len2).compareTo(o1) ;

//                 }else if(len1 > len2){
//                     int i,t=0;
//                     for(i = 0; i<len1/len2 ;i++){
//                         if( o2.compareTo(o1.substring(len2*i, len2*i+len2))==0){
//                          continue;
//                         }
//                         return o2.compareTo(o1.substring(len2*i, len2*i+len2));
//                     }
//                     for(int j = len2 * i;j < len1;j++){
//                         if(o1.charAt(j) != o2.charAt(t)){
//                             return o2.charAt(t++)-o1.charAt(j);
//                         }
//                     }
//                     return len1-len2;
//                     // return o2.charAt(++t)-o1.charAt(len1-1);
// //                    for(int i = 0; i < len2; i++){
// //                        if(o1.charAt(i) != o2.charAt(i)){
// //                            return o2.charAt(i)-o1.charAt(i);
// //                        }
// //                    }
// //                    return o2.compareTo(o1.substring(len2, len1));
//                 }else{
// //                    System.out.println(o2.compareTo(o1));
//                     return o2.compareTo(o1);
//                 }
//                 // return o2.compareTo(o1);
//             }
//         });
        Collections.sort(array, new Comparator<String>() { //比较s1+s2和s2+s1就行了
            @Override
            public int compare(String o1, String o2) {
                return (o2+o1).compareTo(o1+o2);//1交换 -1不交换
            }
        });
        StringBuilder sb = new StringBuilder();
        for(String s : array){
            sb.append(s);
        }
        return sb.toString().charAt(0)=='0'?"0":sb.toString();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容