问题详情
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [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) {
$allList = [];
$this->backtrack(0,count($nums),$nums,$allList);
return $allList;
}
function backtrack($start,$count,$nums,&$allList){
if($start==$count){
$allList[] = $nums;
}else{
for($i=$start;$i<$count;$i++){
$this->swap($nums,$start,$i);
$this->backtrack($start+1,$count,$nums,$allList);
$this->swap($nums,$start,$i);
}
}
}
function swap(&$arr,$i,$j){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
2019-11-26 转行3年零37天