leetcode46-全排列

题目描述

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

题目分析

全排列全部打印,其实就是使用第一个数字与后面的数字相互交换位置,然后再将剩余的n-1个数字继续进行全排列

Java代码

 public List<List<Integer>> permute(int[] nums) {
     
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> num_1st = new ArrayList<>();
        for(int i=0;i<nums.length;i++){
     
            num_1st.add(nums[i]);
        }
        backtrack(res,num_1st,0,nums.length);
        return res;
    }
    private void backtrack(List<List<Integer>> res,List<Integer> nums,int first,int nLen){
     
        if(first == nLen){
     
            res.add(new ArrayList<>(nums));
            return;
        }
        for(int i=first;i<nLen;i++){
     
            Collections.swap(nums,first,i);
            backtrack(res, nums, first+1, nLen);
            Collections.swap(nums,first,i);
        }
    }

你可能感兴趣的:(遍历,递归)