码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Permutations II

时间:2015-03-07 18:42:23      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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<vector<int> > ans;

    void dfs(int cur, int n, vector<int> &num) {
        if (cur == n) {
            vector<int> 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<vector<int> > permuteUnique(vector<int> &num) {
        sort(num.begin(), num.end());
        ans.clear();
        memset(vis, 0, sizeof(vis));
        dfs(0, num.size(), num);
        return ans;
    }
};




LeetCode Permutations II

标签:

原文地址:http://blog.csdn.net/u011345136/article/details/44118211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!