Skip to content

Latest commit

 

History

History
32 lines (22 loc) · 1010 Bytes

把数组排成最小的数.md

File metadata and controls

32 lines (22 loc) · 1010 Bytes

题目

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

例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323

思路

定义一种新的排序规则,将整个数组重新排序:

ab两个数字可以有两种组合:abba,若ab<baab应该排在ba前面,否则ab应该排在ba后面。

使用数组的sort方法,底层是快排,也可以手写一个快排。

sort方法接收一个比较函数,compareFunction:如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

代码

    function PrintMinNumber(numbers) {
      if (!numbers || numbers.length === 0) {
        return "";
      }
      return numbers.sort(compare).join('');
    }

    function compare(a, b) {
      const front = "" + a + b;
      const behind = "" + b + a;
      return front - behind;
    }