AcWing 51. 数字排列
原题链接
中等
作者:
daniellee
,
2019-04-10 21:17:16
,
所有人可见
,
阅读 1044
C++ 代码
class Solution {
public:
vector<int> v;
vector<int> num;
vector<vector<int>> res;
void dfs(int step, int st,vector<int> &inter) {
if (step == num.size()){
res.push_back(inter);
return;
}
for(int i=st;i<num.size();i++){
if (v[i] == 1) continue;
if (!v[i]){
v[i] = 1;
inter[i] = num[step];
if (step+1<num.size() && num[step] == num[step+1]){
dfs(step+1,i+1,inter);
}
else{
dfs(step+1,0,inter);
}
v[i] = 0;
}
}
}
vector<vector<int>> permutation(vector<int>& nums) {
if (nums.size()==0) return res;
vector<int> vis(nums.size(),0);
vector<int> inter(nums.size());
v = vis;
num = nums;
sort(num.begin(),num.end());
dfs(0,0,inter);
return res;
}
};