class Solution {
public:
    vector<vector<int>> res;

    void dfs(vector<int> &num,vector<int> list,int visited[]){
        if(num.size() == list.size()){
            res.push_back(list);
            return ;
        }
        
        for(int i = 0; i < num.size(); i++){
			if(visited[i] || i > 0 && num[i-1] == num[i] && !visited[i-1])//	如果访问过、或者 前后相邻两个元素一样且前面的元素visited标志为false【实则同一个位置相同的元素已经访问过】 
				continue;

			visited[i] = true;
            list.push_back(num[i]);
            dfs(num,list,visited);
            visited[i] = false;
            list.pop_back();
        }
    }
    
    
    vector<vector<int>> permuteUnique(vector<int> &num) {
        sort(num.begin(),num.end());
        int visited[8] = {0};

        vector<int> list;
        dfs(num,list,visited);
        return res;

    }
};