46. 全排列

46. 全排列_第1张图片

class Solution {
    //回溯
    List<List<Integer>> data=new ArrayList<List<Integer>>();
    public List<List<Integer>> permute(int[] nums) {
        //因为最终返回的是List> data 所以对int[]进行转换
        List<Integer> newnums=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            newnums.add(nums[i]);
        }
        dfs(nums.length,newnums,0);
        return data;

    }
    //为什么多了n 因为List没有求长度的函数
    void dfs(int n,List<Integer> newnums,int x){
        if(x==n){
            // 这个添加的时候要注意了 引用添加
            data.add(new ArrayList<Integer>(newnums));
        }
        //为什么要从x开始遍历,[1,2,3] x和自己交换[1,..],跟其他交换直到len-1 [2,..],[3,..]
        for(int i=x;i<n;i++){
            //List中 反转两个位置的数的函数
            Collections.swap( newnums, x, i);
            dfs(n,newnums,x+1);
            Collections.swap(newnums,x, i);
        }
        return;
    }
 
}

你可能感兴趣的:(leetcode,算法)