题意理解:
同46,但vector中的元素可能存在重复值;
题目分析:
同46一样通过DFS求解,但注意剪枝;
解题代码:
class Solution {
private:
vector<vector<int>> ans;
bool findValue(vector<int> &v, int endIndex, int val){
for(int i=0; i<endIndex; i++){
if(v[i]==val){
return true;
}
}
return false;
}
void dfs(vector<int> &preAns, vector<int> &subNums){
if(subNums.size()==0){
ans.push_back(preAns);
return;
}
int size=subNums.size();
for(int i=0; i<size; i++){
int n=subNums[i];
if(findValue(subNums, i, n)){
continue;
}
vector<int> tPreAns(preAns);
tPreAns.push_back(n);
vector<int> tSubNums(subNums);
tSubNums.erase(find(tSubNums.begin(), tSubNums.end(),n));
dfs(tPreAns, tSubNums);
}
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<int> pre;
dfs(pre, nums);
return ans;
}
};