给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
class Solution { public: vector<vector<int>>res;// 保存所有情况 vector<vector<int>>permuteUnique(vector<int>& nums) { vector<bool> nums1(nums.size(),true); vector<int>current;//当前保存的结果 vector<int>used; trace_back(nums,current,nums1,used); return res; } void trace_back(const vector<int>& nums,vector<int> ¤t,vector<bool>&num_flag,vector<int>&used) { //判断是否已经生成一个结果 if(current.size()==nums.size()) { res.push_back(current);//保存在结果中 return; } else { for(int i=0;i<nums.size();i++) { auto it=find(used.begin(), used.end(), nums[i]); if(num_flag[i]&&it==used.end())//判断节点有咩有使用过 { used.push_back(nums[i]);//把使用过得节点放入,用作重复判断 current.push_back(nums[i]); num_flag[i]=false;//使用过该节点 所以判断为false vector<int>use;//到子节点得时候重新建立 相关重复判断use trace_back(nums,current,num_flag,use);//开始往子节点走 //恢复状态 current.pop_back(); num_flag[i]=true; } } } } };