输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最小的一个

时间:2025-04-16 11:54:00

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

 

 function index(){
	    $array = array(321, 3, 342);
	    $len = count($array);
	    for ($i = 1; $i < $len; $i++) {
	    	for ($k = 0; $k < $len - $i; $k++) {
	    		if ($this->compare($array[$k], $array[$k + 1])) {
	    			$tmp = $array[$k + 1];
	    			$array[$k + 1] = $array[$k];
	    			$array[$k] = $tmp;
	    		}
	    	}
	    }
	    $str = "";
	    print_r($array);
	    foreach($array as $value){
	    	$str .= $value;
	    }
	    echo $str;
    }

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最大的一个

 function index2(){
    	$res = array('321','32','3');
		$a1 = $a2 = $a3 = array();
		$zh1 = $zh2 = $zh3 = array();
		for($i=0;$i<count($res);$i++)
		{
			$a1 = array(strval($res[$i]));
			array_push($zh1, $a1);//每循环一次,压入一个组合
			for($j=0;$j<count($res);$j++)
			{
				if($i == $j){
					continue;
				}
				$a2 = empty($a2)?array_pop($zh1):$a2;
				$tmp2 = $a2;
				array_push($a2, strval($res[$j]));
				array_push($zh2, $a2);
				$a2 = $tmp2;
				unset($tmp2);
				for($k=0;$k<count($res);$k++)
				{
					if($i == $k || $j == $k){
						continue;
					}
					$a3 = empty($a3)?array_pop($zh2):$a3;
					$tmp3 = $a3;
					array_push($a3, strval($res[$k]));
					array_push($zh3, $a3);
					$a3 = $tmp3;
					unset($tmp3);
				}
				$a3 = array();//清空a3值,进入下一次组合循环
			}
			$a2 = array();//清空a2值,进入下一次组合循环
		}
		$zh = $zh3;
		
		$str_list=[];
		foreach ($zh as $v){
			$str_list[] = implode('', $v);
		}
		sort($str_list);
		echo array_pop($str_list);
    }