47. 全排列 II

 1 class Solution 
 2 {
 3     vector<vector<int>> ans;
 4     vector<int> temp;
 5     vector<bool> st;
 6 public:
 7     vector<vector<int>> permuteUnique(vector<int>& nums) 
 8     {
 9         st = vector<bool>(nums.size(),false);
10         sort(nums.begin(),nums.end());
11         dfs(nums,0);
12         return ans;
13     }
14 
15     void dfs(vector<int>& nums,int cur)
16     {
17         if(cur == nums.size())
18         {
19             ans.push_back(temp);
20             return;
21         }
22 
23         //注意i = 0而不是为cur
24         for(int i = 0;i < nums.size();i ++)
25         {
26             if(!st[i])
27             {     
28                 //如果这个数和之前的数一样,并且之前的数还未使用过
29                 if(i != 0 && nums[i] == nums[i - 1] && !st[i - 1]) continue; 
30                 
31                 st[i] = true;
32                 temp.push_back(nums[i]);
33                 dfs(nums,cur + 1);
34 
35                 temp.pop_back();
36                 st[i] = false;
37             }
38         }
39     }
40 };

 

posted @ 2020-03-18 17:19  Jinxiaobo0509  阅读(98)  评论(0)    收藏  举报