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

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

示例 1:

输入: [10,2]
输出: "102"

示例 2:

输入: [3,30,34,5,9]
输出: "3033459"

解题思路:
此题求拼接起来的最小数字,本质上是一个排序问题。设数组 numsnums 中任意两数字的字符串为 xx 和 yy ,则规定 排序判断规则 为:

  • 若拼接字符串 x + y > y + x ,则 x “大于” y;x排在y右边
  • 反之,若 x + y < y + x ,则 x “小于” y ;x排在y左边

<font size="3>根据以上规则,套用任何排序方法对 numsnums 执行排序即可。

剑指 Offer 45. 把数组排成最小的数
算法流程:

  1. 把数组转化为字符串数组
  2. 应用定义排序,对字符串数组进行排序
  3. 拼接排好序的字符串,并返回

代码如下:

var minNumber = function(nums) {
    //利用数组join方法将数组中所有的元素放入字符串,然后利用split方法把一个字符串分割为字符串数组
    nums = nums.join("|").split("|");
    //利用sort自定义排序,join连接字符串
    nums = nums.sort(function(a,b){
        //判断组合后的大小
        if(parseInt(a+b) < parseInt(b+a)) return -1;
        return 1;
    }).join("")
    return nums
};
上一篇:优路教育冲刺上市:曾因侵害用户权益遭通报,石泰直接持股45%


下一篇:软考考完以后还需要做些什么?