题目描述
和填坑法一样 主要问题是重复数字约定一个顺序
因此约定每次交换时 如果有多个重复数字 用最后一个交换;
比如 a1 b a2 c a3 d g
重复a的顺序为a3 a2 a1
C++ 代码
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> permutation(vector<int>& nums) {
//sort(nums.begin(),nums.end());
dfs(nums,0,nums.size());
return res;
}
void dfs(vector<int> &nums,int start,int len){
if(start==len-1) {
res.push_back(nums);
return;
}
for(int i=start;i<len;i++){
int j=0;
for(j=i+1;j<len;j++)//增加判断是否有重复字符
if(nums[i]==nums[j])
break;
if(j==len){
swap(nums[start],nums[i]);
dfs(nums,start+1,len);
swap(nums[start],nums[i]);
}
}
}
};