#16 Permutations II

原创 2016年08月30日 13:09:52

题目描述:

Given a list of numbers with duplicate number in it. Find all uniquepermutations.

Example

For numbers [1,2,2] the unique permutations are:

[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]
题目思路:

这题和#15差不多。为了避免重复的情况,增加一个set去记录已经写入答案中的vector就好了。

Mycode(AC = 290ms):

class Solution {
public:
    /**
     * @param nums: A list of integers.
     * @return: A list of unique permutations.
     */
    vector<vector<int> > permuteUnique(vector<int> &nums) {
        // write your code here
        vector<vector<int>> ans;
        if (nums.size() == 0) return ans;
        
        vector<int> sofar;
        unordered_set<int> visited;
        set<vector<int>> answered;
        permute(ans, sofar, nums, visited, answered);
        return ans;
    }
    
    void permute(vector<vector<int>>& ans,
                 vector<int>& sofar,
                 vector<int>& nums,
                 unordered_set<int>& visited,
                 set<vector<int>>& answered)
    {
        if (sofar.size() == nums.size()) {
            if (answered.find(sofar) == answered.end()) {
                answered.insert(sofar);
                ans.push_back(sofar);
            }
            return;
        }
        
        for (int i = 0; i < nums.size(); i++) {
            if (visited.find(i) == visited.end()) {
                sofar.push_back(nums[i]);
                visited.insert(i);

                permute(ans, sofar, nums, visited, answered);
                
                sofar.pop_back();
                visited.erase(i);
            }
        }
    }
};


版权声明:三千微尘里,吾宁爱与憎

相关文章推荐

16.Permutations II-带重复元素的排列(中等题)

带重复元素的排列 题目给出一个具有重复数字的列表,找出列表所有不同的排列。 样例给出列表 [1,2,2],不同的排列有: 挑战使用递归和非递归分别完成该题。 题解 1.递归解法class Solu...

leetcode_Permutations II

就该题来说,它是Permutation的进化版本,即该排列可能具有相同的元素。就Permutation这道题来说,假如第一次做的话 也不太好做,就是每次交换begin和后面的元素,然后在该位置的基础上...

Permutations II -- LeetCode

原题链接: http://oj.leetcode.com/problems/permutations-ii/  这个题跟Permutations非常类似,唯一的区别就是在这个题目中元素集合可以出现重...

Permutations II 有重复的排序

不熟悉permutations的朋友可以先看看我前面的博文。 带有重复数的排列将在之前没有重复数的排列的基础上进行改动。 我们设置一个bool数组来标记数是否被使用, 且对原始的array进行排...

[LeetCode]--47. Permutations II

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

47. Permutations II -Medium

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

LeetCode 46 Permutations II

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

Permutations II

【题目】         Given a collection of numbers that might contain duplicates, return all possible uniq...

Permutations II

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

LeetCode Permutations I && II

不用修改,就两个问题都适用的算法,调用STL就行的。运行速度还是很快的。 下面我用先序遍历树的思想写的代码,画个树理解就好了: 如第一次遍历:访问abc节点,取出a放入结果中,从abd节点到访问...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)