题目链接:LeetCode 47. 全排列 II
题意:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
解题思路:
对于条件,还是要判断,确保数字只使用过一次,还要保证
class Solution {
private:
vector<vector<int>> ans;
int n;
public:
void dfs(vector<int>& nums, vector<int> v, int index, vector<bool>& flag) {
if(index == n) {
ans.emplace_back(v);
}
for(int i = 0; i < n; i++) {
if(!flag[i] || (i > 0 && nums[i] == nums[i-1] && flag[i-1])) { // 当前数字被使用过,或者两个数相同但是前一个未被使用
continue;
}
v.push_back(nums[i]);
flag[i] = false;
dfs(nums, v, index+1, flag);
v.pop_back();
flag[i] = true;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
n = nums.size();
vector<int> v;
vector<bool> flag(n, true);
dfs(nums, v, 0, flag);
return ans;
}
};

本文详细解析了LeetCode47.全排列II题目,针对包含重复数字的序列,介绍了如何找出所有不重复的全排列。通过示例说明了具体的解题思路和实现代码。
1274

被折叠的 条评论
为什么被折叠?



