【剑指Offer】45. 把数组排成最小的数

题目链接:把数组排成最小的数

题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

题目分析:

题目要求将数组排成一个最小的数,即对数组按照字符串的规则进行排序,规则如下:

1)两个数字的位数一样,则较大的数字排在右边;

2)两个数字的位数不一样,那么对于公有的位上的数字 ,对应位上数字较大的数排在右边;

3)对于情况2),若两个数字公有位的数字都一样,那么需要将两个数字对应的字符串分别作为首尾进行拼接,即将数字A和B分别拼接成AB和BA,对AB和BA进行比较,若AB较小,那么A在数组中排在坐标,B排在右边,反之,B排在左边,A排在右边。

即重写数组的sort方法。

js代码如下:

var minNumber = function(nums) {
    const length=nums.length;
    if(length==1)
        return nums[0].toString();
    nums.sort((a, b) => {
        let strA = a.toString();
        let strB = b.toString();
        if (strA.length == strB.length)
            return a - b;
        else {
            let i = 0;
            while (i < strA.length && i < strB.length) {
                if (strA[i] != strB[i])
                    return parseInt(strA[i]) - parseInt(strB[i]);
                i++;
            }
            let num1 = parseInt(strA.slice(0) + strB.slice(0));
            let num2 = parseInt(strB.slice(0) + strA.slice(0));
            return num1-num2;
        }
    })
    return nums.join('');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值