多位个数字 ,不同组合排列之和 (不重复,所有可能的组合之和) PHP

数组

$array = [1,2,3,4]; // 多位数也可以

以下是所需第一种方式结果

在这里插入图片描述

以下是具体实现代码

   public function getSortList($array,$level = -1,&$list =[])
    {	
    	for ($i=0; $i < count($array); $i++) { 
    		if($level < 0){
    			//第一级直接输出对应数字
				$list[] = $array[$i];
    		}else{
	    		$values  = $array[$i];
	    		//根据等级组装前几位
				for ($k=0; $k < $level ; $k++) { 
		    		$values   .=  '+'.$array[$i+$k+1];
		    	}
		    	$j= 0;
		    		//循环拼合最后一位
				for ($n=($i+$level+1); $n < count($array); $n++) { 
					$j++;
					$first  =  $values; // 组合上几位
					$first .=  '+'.$array[$n];
					$list[] = $first;

				}
				
				//到最后一位结束递归
				if($j == 1){
					break;
				} 
			}
				
	    }
	    //长度大于等级+2停止递归
	    if(($level+2)  < count($array)){
    		$this->getSortList($array,$level+1,$list);
    	}	
    	return $list;
    }

还有另外一种结果
在这里插入图片描述

排序的方式不同

public function getSortList($array,$index = 0,$up =0,&$result =[])
 {
		for ($i=$index; $i < count($array); $i++) {
            if($index > 0 ){
            	$value = $up.$array[$i];
            }else{
            	$value = $array[$i];
            }
            $result[]  = $value;
            $this->getSortList($array,$i+1,$value,$result);
        }
        return $result ;
		
 }

如果有更好的方式,也请大家评论提供参考

猜你喜欢

转载自blog.csdn.net/abc564643122/article/details/85245842