LeetCode Permutations II

2015-07-20 17:12:06 ? 作者: ? 浏览: 3

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[1,1,2], [1,2,1], and [2,1,1].

题意:求不重复的所有序列。

思路:dfs,但是要注意一点的是如果去重:排序后,可以为每个数都设置一个vis表示是否访问过,当两个相邻的数一样且前一个被访问过了,那么这个数才能使用,才能避免重复。

class Solution {
public:
    int vis[110], a[110];
    vector
  
    > ans;

    void dfs(int cur, int n, vector
   
     &num) { if (cur == n) { vector
    
      tmp; for (int i = 0; i < n; i++) tmp.push_back(a[i]); ans.push_back(tmp); return; } for (int i = 0; i < n; i++) if (!vis[i]) { if (i != 0 && num[i] == num[i-1] && vis[i-1]) continue; vis[i] = 1; a[cur] = num[i]; dfs(cur+1, n, num); vis[i] = 0; } } vector
     
       > permuteUnique(vector
      
        &num) { sort(num.begin(), num.end()); ans.clear(); memset(vis, 0, sizeof(vis)); dfs(0, num.size(), num); return ans; } };
      
     
    
   
  




-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: