给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:就是回溯法,首先把解空间想清楚,把解空间转化成解空间树,进行查找即可。
其实就是查找多叉树。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
vector<int> index(nums.size());
vector<int> s;
if(nums.size()<=0)
{
return res;
}
add(res,index,s,nums);
return res;
}
void add(vector<vector<int>>& v,vector<int>& index,vector<int> s,vector<int>& nums){
if(s.size()==nums.size())
{
v.push_back(s);
return;
}
for(int i = 0;i<nums.size();i++){
if(index[i]==1)
continue;
s.push_back(nums[i]);
index[i] = 1;
add(v,index,s,nums);
index[i] = 0;
s.pop_back();
}
}
};