一維數字數組,拼接獲取最大數字

<?php
// 要求: 給定一維數字數組,拼接獲取最大數字,如  [4345,43,4,98,9]  ===>  9984434543php

$arr = [43,2,12,46,9,98,99,54];
$newArr = [];
$arr = array_map('strval',$arr);數組

$len = count($arr);排序

// 對數組進行排序
for($i=0;$i<$len;$i++) {
if(isset($arr[1])) {
$n = $arr[0];
$key = 0;
// 獲取最大數
foreach($arr as $k=>$v) {
$re = preNum($n,$v);
if (!$re) {
$n = $v;
$key = $k;
}
}
// 銷燬已拼接數字
unset($arr[$key]);
// 排序: 重置鍵
sort($arr);
// 返回結果
$newArr[] = $n;
}elseif(isset($arr[0])) {
$newArr[] = $arr[0];
}
}
// 將數組進行join
$res = implode($newArr);
$res = intval($res);
var_dump($res); // 結果爲99998544643212字符串

/**
* 功能: 若是 $n1 應排前,返回true , 不然返回false
*
* @param string $n1 數字字符串
* @param string $n2 數字字符串
*/
function preNum($n1,$n2) {
$len1 = strlen($n1);
$len2 = strlen($n2);string

// 若是位數同樣,比較大小便可
if($len1 == $len2) {
if ($n1 < $n2) {
return false;
}else {
return true;
}
}it

// 若是位數不同 ,判斷位數小的數字和另外一個在位數相同狀況下的大小
$min = min($len1,$len2);
$tmpNum1 = substr($n1,0,$min);
$tmpNum2 = substr($n2,0,$min);
if ($tmpNum1 > $tmpNum2) {
return true;
}elseif($tmpNum1 < $tmpNum2){
return false;
}else {
// 拼接剩餘部分,比較拼接後數字大小
if ($len1 < $len2) {
$split2 = substr($n2,$min) . $tmpNum1;
$split1 = $tmpNum1 . substr($n2,$min);io

if ($split1 >= $split2) {
return true;
}
}else {
$split2 = substr($n1,$min) . $tmpNum1;
$split1 = $tmpNum1 . substr($n1,$min);function

if ($split1 < $split2) {
return true;
}
}
return false;
}
}class

var_dump(preNum('4546','45')); // trueforeach

相關文章
相關標籤/搜索