static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> res;
resover(0, res, nums);
return res;
}
// 确保从start开始的一个子排列里面,在end这个数前面没有和end相同的数
bool check(int start, int end, vector<int>& nums){
int num = nums[end];
for (int i = start; i < end; i++)
if (nums[i] == num)
return false;
return true;
}
void resover(int n, vector<vector<int>>& res, vector<int>& nums){
if (n == nums.size()){
vector<int> tmp;
for(int i = 0; i < nums.size(); i++)
tmp.push_back(nums[i]);
res.push_back(tmp);
return;
}
for (int i = n; i < nums.size(); i++){
if (check(n, i, nums)){
swap(nums[i], nums[n]);
resover(n + 1, res, nums);
swap(nums[i], nums[n]);
}
}
return;
}
};
LetCode 47. 全排列 II
最新推荐文章于 2021-07-27 04:19:37 发布