46. Permutations(全排列)(Java)

原题链接:https://leetcode.com/problems/permutations/

思路是用dfs,依次找出每一层递归中符合条件的数字添加到curList中去。

直到curList.size()==nums.length;

我在这里用了一个Boolean数组来判断此数字是否在这次深度dfs中出现过。

AC 2ms beats 99%  java:

class Solution {
    List<List<Integer>> list=new ArrayList();
    public List<List<Integer>> permute(int[] nums) {
        boolean[] flag=new boolean[nums.length];
        helper(nums,flag,new ArrayList<Integer>());
        return list;
    }
    public void helper(int[] nums,boolean[] flag, List<Integer> curList){
        if(curList.size()==nums.length){
            list.add(new ArrayList(curList));
            return;
        }
        for(int i=0;i<nums.length;i++){
            if(!flag[i]){
                flag[i]=true;
                curList.add(nums[i]);
                helper(nums,flag,curList);
                curList.remove(curList.size()-1);
                flag[i]=false;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/87968058