class Solution {
//呀 需要的是带有去重功能的全排列了,OK办法来了:可以利用一下map进行操作了
vector<int> path;
vector<vector<int > > ans;
void backtracking(vector<int>& nums, vector<bool>& used) {
if (path.size() == nums.size()) {
ans.push_back(path);
return ;
}
unordered_map<int, int> mp; //一定要是局部的才行,去重
for (int i = 0; i < nums.size(); ++i) {
if (used[i]) continue;
if (mp.find(nums[i]) != mp.end()) continue;
mp[nums[i]] += 1;
used[i] = 1;
path.push_back(nums[i]);
backtracking(nums, used);
used[i] = 0;
path.pop_back();
}
return ;
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<bool> used(nums.size());
backtracking(nums, used);
return ans;
}
};
//我上述 采取的 仅仅 只是一种去重的方式方法: 其实 还有其他的很多的去重的方式方法的:
//比如 其实 可以 不用 mp 进行判断 出现 可以使用 使用sort 然后 出现相同的 就就进行
一个 continue的方式方法 来进行处理:
//去重方式2: 排序去重法:
class Solution {
//呀 需要的是带有去重功能的全排列了,OK办法来了:可以利用一下map进行操作了
vector<int> path;
vector<vector<int > > ans;
void backtracking(vector<int>& nums, vector<bool>& used) {
if (path.size() == nums.size()) {
ans.push_back(path);
return ;
评论0
最新资源