public void permuteUniqueDFS(int [] num, Stack<Integer> stk, int level){
        if(level == num.length){
            res.add(new ArrayList<Integer>(stk));
            return;
        }
        for(int i = 0; i < num.length; ++i){
            if(!visited.get(i)){
//                if(i > level && num[i] == num[i-1]) continue;
                visited.set(i);
                stk.push(num[i]);
                permuteUniqueDFS(num, stk, level+1);
                stk.pop();
                visited.clear(i);
                while(i < num.length - 1 && num[i] == num[i+1]) ++i;
            }
        }
    }