题解 | #数字排成最小的数#

把数组排成最小的数

http://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993

import java.util.*;

public class Solution {
    //自定义排序规则:思想就是让任意两个数字组成的数都是较小的哪一种情况
    class Myconparator implements Comparator<Integer> {
        public int compare(Integer n1 , Integer n2) {
            long l1 = Long.parseLong(n1+""+n2) ;
            long l2 = Long.parseLong(n2+""+n1) ;
            if(l1 == l2) {
                return 0 ;
            } else if(l1 > l2) {
                return 1 ;
            } else {
                return -1 ;
            }
        }
    }
    //快排(也可以用Arrays.sort() , 单纯练习一下快排)
    public void sort(int[] numbers , int start , int end , Myconparator cmp) {
        if(start >= end) {
            return ;
        }
        int i = start ;
        int j = end ;
        int temp = numbers[start] ;
        while(i < j) {
            while(i < j && cmp.compare(numbers[j],temp) > 0) {
                j-- ;
            }
            if(i < j) {
                numbers[i] = numbers[j] ;
                i++ ;
            }
            while(i < j && cmp.compare(numbers[i],temp) < 0) {
                i++ ;
            }
            if(i < j) {
                numbers[j] = numbers[i] ;
                j-- ;
            }
        }
        numbers[i] = temp ;
        sort(numbers , start , i-1,cmp) ;
        sort(numbers , i+1 , end , cmp) ;
    }
    public String PrintMinNumber(int [] numbers) {
        sort(numbers , 0 ,  numbers.length-1 , new Myconparator()) ;
        StringBuilder sb = new StringBuilder() ;
        for(int n : numbers) {
            sb.append(String.valueOf(n)) ;
        }
        return sb.toString() ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务