#include <vector>
class Solution {
public:
    void dfs(vector<vector<int>> & ans, vector<int> temp, vector<bool> vis, vector<int> num, int n){
        if(n == temp.size()){
            ans.push_back(temp);
        }
        for(int i = 0; i < n; i ++){
            if(vis[i]) continue;
            //与有重复的全排列的区别就是,防止出现两个相同的元素排出一样的序列
            temp.push_back(num[i]);
            vis[i] = true;
            dfs(ans, temp, vis, num, n);
            vis[i] = false;
            temp.pop_back();
        }
    }
    vector<vector<int> > permute(vector<int>& num) {
        int n = num.size();
        vector<vector<int>> ans;
        if(n == 0) return ans;

        vector<int> temp;
        vector<bool> vis(n, false);
        dfs(ans, temp, vis, num, n);
        return ans;
    }
};