public static List<List<Integer>> permute(int[] num) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if (0 == num.length) return res;
        if (1 == num.length) {
        	List<Integer> t = new ArrayList<Integer>();
        	t.add(num[0]);
        	res.add(t);
        	return res;
        }
        for (int i = 0; i < num.length; i++) {
        	int n = num[i];
        	int[] t = new int[num.length - 1];
        	int delta = 0;
        	for (int j = 0; j < num.length; j++) {
        		if (j == i) {delta = 1;continue;}
        		t[j - delta] = num[j];
        	}
        	List<List<Integer>> ra = permute(t);
        	for (List<Integer> a : ra) {
        		a.add(0, n);
        	}
        	res.addAll(ra);
        }
    	return res;
    }