【刷算法】把数组排成最小的数

题目形貌

输入一个正整数数组,把数组里一切数字拼接起来排成一个数,打印能拼接出的一切数字中最小的一个。比方输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

剖析

把数组根据能够到达终究最小数字的递次重新排列一遍,然则有一个题目,排序的衡量标准是什么,也就是说两个数字怎样推断谁前谁后?

比方[3,5,32,321],3和5很好推断,肯定是3在前末了的排成的数字比较小,然则5和32呢?所以,排序的衡量标准应该是比较这两个数字排成的数字的大小,比方5和32,能够排成532和325,325<532,所以32得排在前面。

代码完成

function PrintMinNumber(numbers)
{
    if(numbers.length === 0)
        return '';
    if(numbers.length === 1)
        return numbers[0];
    
    numbers.sort(function(a,b) {
        var astr = a.toString(), bstr = b.toString();
        
        var ab = +(astr+bstr), ba = +(bstr+astr);
        return ab - ba;
    })
    
    var res = '';
    for(var i = 0;i < numbers.length;i++){
        res += numbers[i];
    }
    
    return +res;
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015806564
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞