【发布时间】:2022-01-11 10:18:23
【问题描述】:
我正在解决这个问题: https://leetcode.com/problems/permutations-ii/
这是我的工作解决方案:
class Solution {
public:
vector<vector<int>> output;
void swap(vector<int>& nums, int index, int i){
int temp=nums[index];
nums[index]=nums[i];
nums[i]=temp;
return;
}
void helper(vector<int> nums, int index){ //here it is normally passed
if(index==nums.size()){
output.push_back(nums);
return;
}
for(int i=index; i<nums.size(); i++){
if(i!=index && nums[i]==nums[index]){continue;}
swap(nums, i, index);
helper(nums, index+1);
// swap(nums, i, index); //commented and used only with passed by reference
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
int size = nums.size();
sort(begin(nums) ,end(nums));
helper(nums, 0);
return output;
}
};
然后这是我通过引用传递并在回溯时交换的解决方案:
class Solution {
public:
vector<vector<int>> output;
void swap(vector<int>& nums, int index, int i){
int temp=nums[index];
nums[index]=nums[i];
nums[i]=temp;
return;
}
void helper(vector<int> &nums, int index){ //here nums is passed by reference
if(index==nums.size()){
output.push_back(nums);
return;
}
for(int i=index; i<nums.size(); i++){
if(i!=index && nums[i]==nums[index]){continue;}
swap(nums, i, index);
helper(nums, index+1);
swap(nums, i, index); //backtrack
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
int size = nums.size();
sort(begin(nums) ,end(nums));
helper(nums, 0);
return output;
}
};
但此解决方案似乎无法正常工作。 谁能解释一下为什么两者之间有区别?
【问题讨论】:
-
请不要指望我们解释“工作正常”是什么意思。提供您用来确定“无法正常工作”的实际测试数据,并显示输出是什么,然后显示您期望的输出。
-
抱歉,不知道这个功能。现在已经添加了相应的图像。
-
How do I ask a good question? 阅读:请勿发布代码、数据、错误消息等的图片。
标签: c++ reference backtracking