【DFS 回溯】46. 全排列 47. 全排列 II
注意是对原数组进行交换!!!
class Solution {
public:
void dfs(vector<int>& nums, int index){
if(index == num_len){
result.push_back(nums);
return;
}
for(int i=index; i<num_len; ++i){
swap(nums[index], nums[i]);
dfs(nums, index + 1);
swap(nums[index], nums[i]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
num_len = nums.size();
dfs(nums, 0);
return result;
}
private:
int num_len;
vector<vector<int>> result;
};
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
添加一个排序和去重步骤,有上一题方法二修改而来。
class Solution {
public:
void dfs(vector<int> nums, int index){
if(index == num_len){
result.push_back(nums);
return;
}
for(int i=index; i<num_len; ++i){
if(i!=index && nums[index] == nums[i]) continue;
swap(nums[index], nums[i]);
dfs(nums, index + 1);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
num_len = nums.size();
sort(nums.begin(), nums.end());
dfs(nums, 0);
return result;
}
private:
int num_len;
vector<vector<int>> result;
};

浙公网安备 33010602011771号