用二进制数记录这个是真的tql
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
vector<vector<int>> permutation(vector<int>& nums) {
path.resize(nums.size());
sort(nums.begin(), nums.end());
dfs(nums, 0, 0, 0);
return ans;
}
void dfs(vector<int>& nums, int u, int start, int state)
{
if (u == nums.size()) {
ans.push_back(path);
return;
}
// 如果是第一个数或者当前数与前一个数不相同
if (!u || nums[u] != nums[u - 1]) start = 0;
for (int i = start; i < nums.size(); i++) {
if (!(state >> i & 1)) //判断二进制的第i位是否为1
{
path[i] = nums[u];
dfs(nums, u + 1, i + 1, state + (1 << i));
// 把第i位标记为1
}
}
}
};