题目描述:
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
解法一:
简单递归,每次选择一个未出现过的数字。可以不用visit数组来标记数字是否已出现,可以直接在当前序列中find。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
help(nums);
return ans;
}
void help(vector<int>& nums){
if(nums.size()==path.size()){
ans.push_back(path);
return;
}
for(auto n:nums){
auto pos = find(path.begin(), path.end(), n);
if(pos == path.end()){
path.push_back(n);
help(nums);
path.pop_back();
}
}
}
private:
vector<int> path;
vector<vector<int>> ans;
};
解法二:
调std已实现的函数next_permutation,先对数组排序,然后每次得到下一个排序。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
ans.push_back(nums);
while(next_permutation(nums.begin(),nums.end())){
ans.push_back(nums);
}
return ans;
}
};