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

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

题目描述


输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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;
}



相关文章
|
5天前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
5天前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
33 0
|
3天前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
5天前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
5天前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积
|
5天前
|
算法
【算法】前缀和——寻找数组的中心下标
【算法】前缀和——寻找数组的中心下标
|
11天前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
21 0
|
11天前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
10 0
|
2月前
|
存储 算法 调度
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问

热门文章

最新文章