46. 全排列

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


排列和组合的对index区别:

与216对比:index是数据的索引位置。当前位置处理完成后,下一层就是本层位置+1;传参i+1;
而对于排列问题:处理的当前位置,下一层是处理的位置即index+1;

    List<List<Integer>> ret = new ArrayList<>();
    public List<List<Integer>> permute(int[] nums) {
        dfs(nums,0);

        return ret;

    }

    public void dfs(int[] nums, int index) {
        if(index == nums.length) {
            List<Integer> list = new ArrayList<>();
            for(int i=0;i<nums.length;i++) {
                list.add(nums[i]);
            }
            ret.add(list);
            return;
        }


        for(int i=index;i<nums.length;i++) {
            swap(nums,index,i);
            // 整合是给了数据,根据需要拼,所以index的位置是遍历数据的位置
            // 排列是给了数据,是对数据本身进行处理。所以index是处理数据的位置。所以这里是index+1
            dfs(nums,index+1);
            swap(nums,index,i);
        }

    }

    public void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

posted @ 2022-02-28 16:05  一颗青菜  阅读(3)  评论(0)    收藏  举报