把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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。
推荐文章: