function getAllPerm($source) { $rs = array(); sort($source); $last = count($source) - 1; $z = 0; $x = $last; $rs[] = $source; while($x > 0) { // 相鄰的兩個元素,先將x的值賦給y,x再自減1 $y = $x--; // 如果前一個元素的值小于后一個元素的值 if($source[$x] < $source[$y]) { // 從尾部開始,找到第一個大于 $x 元素的值 www.it165.net $z = $last; while($source[$x] > $source[$z]) { $z--; } // 交換 $x 和 $z 元素的值 list($source[$x], $source[$z]) = array($source[$z], $source[$x]); // 將 $y 之后的元素全部逆向排列 for($i = $last; $i > $y; $i--, $y++) { list($source[$i], $source[$y]) = array($source[$y], $source[$i]); } $rs[] = $source; $x = $last; } } return $rs; } $source = array(1,2,3); $rs = getAllPerm($source); print_r($rs);
輸出結果:
Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 1 [1] => 3 [2] => 2 ) [2] => Array ( [0] => 2 [1] => 1 [2] => 3 ) [3] => Array ( [0] => 2 [1] => 3 [2] => 1 ) [4] => Array ( [0] => 3 [1] => 1 [2] => 2 ) [5] => Array ( [0] => 3 [1] => 2 [2] => 1 ) )PHP編程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答