public:
vector<vector<int>>result;
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len=nums.size();
dfs(nums,0,len);
sort(result.begin() , result.end());
result.erase(unique(result.begin() , result.end()) , result.end()); //unique 返回重复的第一个元素。
return result;
}
void dfs(vector<int>& nums,int start,int &len) //回溯法
{
//int i;
if(start==len)
{
result.push_back(nums);
return;
}
for(int i=start;i<len;i++)
{
swap(nums[start],nums[i]);
dfs(nums,start+1,len);
swap(nums[start],nums[i]);
}
}
};
class Solution {
public:
vector<vector<int>>result;
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len=nums.size();
dfs(nums,0,len);
// sort(result.begin() , result.end());
// result.erase(unique(result.begin() , result.end()) , result.end());
return result;
}
void dfs(vector<int>& nums,int start,int &len)
{
//int i;
if(start==len)
{
result.push_back(nums);
return;
}
for(int i=start;i<len;i++)
{
if(!isSame(nums,start,i))
{
swap(nums[start],nums[i]);
dfs(nums,start+1,len);
swap(nums[start],nums[i]);
}
}
}
bool isSame(vector<int> nums , int begin , int end)
{
for(int i = begin ; i < end ; i++)
{
if(nums[end] == nums[i])
return true;
}
return false;
}
};
回溯法,不过考虑元素是否在在存的容器中,在的话不递归。