把数组排成最小的数

1.题目描述
传送门
2.code(java1.7版本)

import java.util.*;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        if(numbers==null)return "";
        int len=numbers.length;
        if(len==0)return "";
        String[] str=new String[len];
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<len;i++){
            str[i]=String.valueOf(numbers[i]);
        }
        Arrays.sort(str,new Comparator<String>(){
            @Override
            public int compare(String s1,String s2){
                String c1=s1+s2;
                String c2=s2+s1;
                return c1.compareTo(c2);
            }
        });
        for(int i=0;i<len;i++){
            sb.append(str[i]);
        }
        return sb.toString();
    }
}

3.解题思路
对于这道题,其实只需要将原来数组里面的数据按照一个设定的规则从小到大排序,在将全部的数据按照字符串拼接起来即可完成最小字符串的发现。但是怎么进行数据之间两两的大小的比较?这就需要我们自己设定比较的规则,可以看出,我们是希望最后的字符串数据最小,那么我们需要以拼接好的数据作为比较的依据来比较原来数据的大小排列,则规则如下:
若ab > ba 则 a > b,
若ab < ba 则 a < b,
若ab = ba 则 a = b;
其中,a,b都为原来的数据转换为的字符串,这样设定比较规则,再用java里面的sort进行整体的排序,最后进行全部字符串的拼接即可得到最后最小的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值