您的位置:首页 > 其它

[LeetCode] Permutations II

2014-11-01 18:07 405 查看
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]
.
class Solution {
public:
    vector<vector<int> > permuteUnique(vector<int> &num) {
        vector<vector<int>> res;
        sort(num.begin(), num.end());
        dfs(res, num, 0);
        return res;
    }
    void dfs(vector<vector<int>> &permu, vector<int> &num, int cur)
    {
        if(cur == num.size())
            permu.push_back(num);
        else
        {
            for(int i = cur; i < num.size(); i++)
            {
                if(noswap(num, i, cur))   continue;
                swap(num[i], num[cur]);
                dfs(permu, num, cur+1);
                swap(num[i], num[cur]);
            }
        }
    }
    bool noswap(vector<int> &num, int i, int cur)
    {
        for(int j = cur; j < i; j++)
            if(num[i] == num[j])
            return true;
        return false;
    }
};


注意noswap的书写,从cur往后扫描,只要有一个数字跟第i个数字一样,就不交换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: