<leetcode c++>47. 全排列 II
47. 全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
解题思路
原数组提前排序,比如[1,1,2,2]这个数组,我们只需要1+[1,2,2]的全排列和2+[1,1,2]的全排列, 对于[1,1,2] 我们只需要1+[1,2]和2+[1,1]
对于[1,2]我们有1+[2]和2+[1],对于[1,1]我们有1+[1],依此类推
class Solution { public: vector<vector<int>> ans; void permute(vector<int>& nums, int st, vector<int> v, vector<bool>& vis){ if(v.size()==nums.size()){ ans.push_back(v); return ; } for(int i=0;i<nums.size();i++){ if((i>0&&nums[i]==nums[i-1]&&!vis[i-1])||vis[i])continue; v.push_back(nums[i]); vis[i]=true; permute(nums, i+1, v, vis); vis[i]=false; v.pop_back(); } } vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<bool> vis(nums.size(),false); permute(nums,0,{},vis); return ans; } };

浙公网安备 33010602011771号