把数组排成最小的数

xiaoxiao2021-02-28  104

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

<?php function PrintMinNumber($numbers) { $result=array(); //全排列,每一种为一个数组 $arr=arrangement($numbers,count($numbers)); //对全排列中的每一种,拼接数组,放到数组result中 for ($i=0;$i<count($arr);$i++){ $result[$i]=implode($arr[$i]); } //返回数组中的最小值 return min($result); } //排列 function arrangement($a, $m) { $r = array(); $n = count($a); if ($m <= 0 || $m > $n) { return $r; } for ($i=0; $i<$n; $i++) { $b = $a; $t = array_splice($b, $i, 1); if ($m == 1) { $r[] = $t; } else { $c = arrangement($b, $m-1); foreach ($c as $v) { $r[] = array_merge($t, $v); } } } return $r; }
转载请注明原文地址: https://www.6miu.com/read-37034.html

最新回复(0)