在面试中遇到这样一个题,就是将数组中元素组成一个最大数,例子数组中元素为array(1,4,9,94,10,18) 组成最大数为994418110
下面是我的思路,直接上代码
function getMaxNum($arr){
//将数组中元素取出最高位组成新的数组,新数组的键是原数组的值,新数组的值是元素最高位值
foreach ($arr as $key => $value) {
$numarr[$value]=substr($value,0,1);
}
//将新数组按照值排序,键值不变
arsort($numarr);
//取出排序好的新数组的键值
$karr = array_keys($numarr);
// 94 9 4 10 18 1
// 遍历数组第一个元素和第二元素组成新的字符串,第二元素和第一个元素组成新的字符串进行
// 比较,较大的组合放在前面
for($i=0,$l=count($karr);$i<$l-1;$i++){
if(strcmp($karr[$i].$karr[$i+1],$karr[$i+1].$karr[$i])<0){
$tmp = $karr[$i];
$karr[$i]= $karr[$i+1];
$karr[$i+1]=$tmp;
}
}
//9 94 4 18 1 10
//将数组进行连接
$maxnum = implode('', $karr);
//输入结果994418110
return $maxnum;
}
谢谢,all!!