题目来源:Leetcode
//不含重复元素
class Solution {
public:
vector<vector<int>> all;
void swap(vector<int> &nums, int p, int q){
int t = nums.at(p);
nums.at(p) = nums.at(q);
nums.at(q) = t;
}
void allsort(vector<int> &nums, int p, int q){
if(p == q){
all.push_back(nums);
}
else{
for(int i = p-1; i >= q; i --){
swap(nums,p-1,i);
allsort(nums,p-1,q);
swap(nums,p-1,i);
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
allsort(nums,nums.size(),0);
return all;
}
};
//含重复元素
class Solution {
public:
vector<vector<int>> all;
bool flag(vector<int> &nums, int p, int q){
bool yes = true;
for(int i = p; i < q; i ++){
if(nums.at(i) == nums.at(q)){
yes = false;
break;
}
}
return yes;
}
void swap(vector<int> &nums, int p, int q){
int t = nums.at(p);
nums.at(p) = nums.at(q);
nums.at(q) = t;
}
void allsort(vector<int> &nums, int p, int q){
if(p == q){
all.push_back(nums);
}
else{
for(int i = p; i < q; i ++){
if(flag(nums,p,i)){
swap(nums,p,i);
allsort(nums,p+1,q);
swap(nums,p,i);
}
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
allsort(nums,0,nums.size());
return all;
}
};