把数组排成最小的数

未匹配的标注

题目描述

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

示例

输入:

[3,32,321]

输出:

“321323”

分析

已知:S1=3,S2=32 。
则,S1S2=332,S2S1=323,S1S2 > S2S1
故,S1 > S2
由上可以知道,我们要自定义排序的规则,将数组由小到大排完序,再拼接起来就是正确结果。

代码

<?php

namespace app\controller;

class Index
{
    function PrintMinNumber($numbers)
    {
        if (empty($numbers)) return false;

        usort($numbers, function ($a, $b) {
            return $a.$b <=> $b.$a;    // 太空船操作符
        });

        return implode('', $numbers);   // 将排好序的数组拼成字符串
    }
}
// 测试
public function test()
{
    $numbers = [3, 32, 321];
    $this->PrintMinNumber($numbers);
}

笔记

太空船操作符:当$a小于、等于或大于$b时它分别返回-1、0或1。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~