class Solution {
/**
* @param Integer[] $nums
* @return Integer[][]
*/
function permute($nums) {
if (empty($nums)) {
return $nums;
}
$res = [];
$this->perm($nums, 0, count($nums)-1, $res);
return $res;
}
function perm($nums, $start, $end, &$res) {
if ($start == $end) {
$res[] = $nums;
return;
}
for ($i=$start; $i<=$end; $i++) {
$this->swap($nums[$i], $nums[$start]);
$this->perm($nums, $start+1, $end, $res);
$this->swap($nums[$i], $nums[$start]);
}
}
function swap(& $a, &$b) {
$tmp = $a;
$a = $b;
$b = $tmp;
}
}