46. 全排列
46. 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
代码如下:
class Solution {
/**
* @param Integer[] $nums
* @return Integer[][]
*/
function permute($nums) {
$count = count($nums);
if ($count == 1) return [$nums];
sort($nums);
$last = $x = $count - 1;
$result[] = $nums;
while (true) {
$y = $x--;
if ($nums[$x] < $nums[$y]) {
$z = $last;
while ($nums[$x] > $nums[$z]) {
$z--;
}
list($nums[$x], $nums[$z]) = array($nums[$z], $nums[$x]);
for ($i = $last; $i > $y; $i--, $y++) {
list($nums[$i], $nums[$y]) = array($nums[$y], $nums[$i]);
}
$x = $last;
$result[] = $nums;
}
if ($x == 0) {
break;
}
}
return $result;
}
}