给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

dfs的递归方法

private List<List<Integer>> ret=new ArrayList();
public List<List<Integer>> permute(int[] nums) {
    TreeSet<Integer> set=new TreeSet();
    for(int i:nums) set.add(i);
    helper(new ArrayList(),set);
    return ret;
}

private void helper(List<Integer> list,TreeSet<Integer> remain){
    if(remain.size()==0) ret.add(list);
    TreeSet<Integer> set=new TreeSet(remain);
    while(set.size()>0){
        int first=set.pollFirst();
        TreeSet<Integer> newSet=new TreeSet(remain);
        List<Integer> newList=new ArrayList(list);
        newSet.remove(first);
        newList.add(first);
        helper(newList,newSet);
    }
}

程浩
21 声望2 粉丝

下一篇 »
47. 全排列 II