【LeetCode】Permutations II
2014-09-07 21:22
381 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
思路:跟之前的Permutations思路基本一样,用一个数组来记录是否可用,同时这个地方要注意的是由于数组有一样的情况,所以要将不同的数字填入然后才进行操作。每次取出一个不同的数,然后利用剩下的数形成子集。
For example,
[1,1,2]have the following unique permutations:
[1,1,2],
[1,2,1],
and
[2,1,1].
思路:跟之前的Permutations思路基本一样,用一个数组来记录是否可用,同时这个地方要注意的是由于数组有一样的情况,所以要将不同的数字填入然后才进行操作。每次取出一个不同的数,然后利用剩下的数形成子集。
class Solution { public: vector<vector<int>> res; vector<vector<int>> permuteUnique(vector<int> &num) { vector<bool> avail(num.size(),true); vector<int> tmp; sort(num.begin(), num.end()); permuteUniqueRe(num,avail,tmp); return res; } void permuteUniqueRe(vector<int> &num, vector<bool> &avail, vector<int> &pos){ if(pos.size() == num.size()){ res.push_back(pos); return; } int last_index = -1; //从开始遍历将没有填入的依次填入 for(int i=0;i<num.size();i++){ if (!avail[i]) continue; if (last_index != -1 && num[i] == num[last_index]) continue; //填入并标记不可用 avail[i] = false; pos.push_back(num[i]); //继续进行操作 permuteUniqueRe(num,avail,pos); //当操作完成以后要将之前填入的退出来 pos.pop_back(); avail[i] = true; last_index = i; } } };
相关文章推荐
- LeetCode:Permutations II
- leetcode-Permutations II
- LeetCode - Permutations II
- leetcode[47]Permutations II
- [Leetcode 47, Hard] Permutations II
- 【LeetCode】Permutations && Permutations II
- [LeetCode]Permutations II
- [leetcode] 47.Permutations II
- [LeetCode]--47. Permutations II
- LeetCode 47 Permutations II
- Leetcode:47. Permutations II
- leetcode 刷题之路 77 Permutations II
- 【Leetcode】Permutations II
- leetcode: Permutations II
- [Leetcode] Permutations II
- [LeetCode] Permutations II 全排列之二
- LeetCode-47.Permutations II
- LeetCode——Permutations II
- 【leetcode 排列组合问题】Next Permutation | Permutations | Permutations II | Permutation Sequence
- Leetcode 46. Permutations & 47. Permutations II