hot100-全排列

全排列

题目描述:

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

思路:

深度优先加回溯问题,res存放最终结果,tmpres存放当前查找路径。

从第0层开始,每次向更深层查找直接遍历整个数组,但是因为元素不能重复,所以每次先判断tmpres中是否已存在当前数组元素。若不存在,将其加入序列,并向下一层查找(迭代调用自身函数),若存在1则跳过。

结束查找的条件是当前tmpres中元素值和数组元素个数相同,

代码:

public static List<List<Integer>> res = new ArrayList<>();
    public static List<List<Integer>> permute(int[] nums) {
        res.clear();
        List<Integer> tmpres = new ArrayList<>();
        fun(tmpres,nums);
        return res;
    }
    public static void fun(List<Integer> tmpres,int[] nums){
        if(tmpres.size()==nums.length){
            res.add(new ArrayList<>(tmpres));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if(!tmpres.contains(nums[i])){
                tmpres.add(nums[i]);
                fun(tmpres,nums);
                tmpres.remove(tmpres.size()-1);
            }
        }

    }

你可能感兴趣的:(hot100个人题解整理,leetcode,深度优先,算法)