[Leetcode] Permutations II
阿新 • • 發佈:2018-02-05
perm 查重 res 不能 描述 出現 bool com sed
Permutations II 題解
題目來源:https://leetcode.com/problems/permutations-ii/description/
Description
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example
For example,
[1,1,2]
have the following unique permutations:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
Solution
class Solution {
private:
void dfs(vector<int>& nums, vector<bool>& used, vector<int>& path,
vector<vector<int> >& res) {
if (path.size() == nums.size()) {
res.push_back(path);
} else {
int size = nums.size();
for (int i = 0; i < size; i++) {
if (used[i])
continue;
if (i > 0 && nums[i] == nums[i - 1] && used[i - 1])
continue;
used[i] = true;
path.push_back(nums[i]);
dfs(nums, used, path, res);
path.pop_back();
used[i] = false ;
}
}
}
public:
vector<vector<int> > permuteUnique(vector<int> &nums) {
vector<vector<int> > res;
vector<int> path;
vector<bool> used(nums.size(), false);
sort(nums.begin(), nums.end());
dfs(nums, used, path, res);
return res;
}
};
解題描述
這道題是Permutations的升級版本,要對給出的數組進行全排列,並且不能出現重復的解法。一開始沒有想到怎麽去標記重復,就直接套用第一版的解法然後在插入結果的時候遍歷查重。之後看了評論區的解法之後才改進了解法:先對數組進行排序,然後進行DFS,過程中使用布爾數組used
進行染色,並且由於對數組已經進行了排序,查重的時候只需檢查前一項是否與當前項相同且已經染色。
[Leetcode] Permutations II