public List<List<Integer>> permute2(int [] num) {
        List<List<Integer>> lastList = new ArrayList<List<Integer>>();
        lastList.add(new ArrayList<Integer>());


        for (int i=0; i<num.length; i++) {
            List<List<Integer>> nowList = new ArrayList<List<Integer>>();
            for (int j=0; j<lastList.size(); j++) {
                List<Integer> oneResult = lastList.get(j);
                for (int k=0; k<=oneResult.size(); k++) {
                    ArrayList<Integer> tmpOneResult = new ArrayList<Integer>(oneResult);
                    tmpOneResult.add(k, num[i]);
                    nowList.add(tmpOneResult);
                }
            }
            lastList = nowList;
        }

        return lastList;
    }