输入一组数字(可能包含重复数字),输出其所有的排列方式。
数据范围
输入数组长度 [0,6]。
样例
输入:[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
终于自己干出来了 不知道该怎么记忆化搜索而暴力用了erase
class Solution {
public:
int a[10];
bool st[100];
vector<vector<int>> res;
vector<int> b;
void dfs(int x , int sz, vector<int>& a)//
{
if(x > sz)
{
res.push_back(b);
return ;
}
for(int i = 0; i < sz ; i++)
{
if(!st[i])
{
st[i] = true; b.push_back(a[i]);
dfs( 1 + x ,sz,a);
st[i] = false; b.pop_back();
}
}
}
vector<vector<int>> permutation(vector<int>& nums)
{
int sz = nums.size();
if(sz == 0)return res;
else
{
dfs(1,sz,nums);
sort(res.begin(),res.end());
res.erase(unique(res.begin(),res.end()),res.end());
return res;
}
}
};