您的位置:首页 > 其它

Leetcode Permutations II

2016-01-28 13:19 344 查看
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]
.

Difficulty: Medium

回溯的基础上加一行判断。

</pre><pre name="code" class="cpp">class Solution {
public:
void back_tracking(vector<vector<int> > &ans, vector<int> &temp, vector<int> &nums, vector<int> &flag){
if(temp.size() == nums.size()){
ans.push_back(temp);
return;
}

for(int i = 0; i < flag.size(); i++){
if(flag[i] == 1 || (i > 0 && nums[i] == nums[i-1] && flag[i-1] == 0))
continue;
temp.push_back(nums[i]);
flag[i] = 1;
back_tracking(ans, temp, nums, flag);
flag[i] = 0;
temp.pop_back();
}
return;

}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int> > ans;
vector<int> temp;
vector<int> flag(nums.size(), 0);
back_tracking(ans, temp, nums, flag);
return ans;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: