leetcode-全排列

一.题目描述

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

https://leetcode-cn.com/problems/permutations/

二.代码

    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums.length == 0) {
            return res;
        }
        helper(nums, 0, nums.length, res);
        return res;
    }

    public void helper(int[] nums, int start, int end, List<List<Integer>> res) {
        if (start == end - 1) {
            List<Integer> item = new ArrayList<>();
            for (int num : nums) {
                item.add(num);
            }
            res.add(item);
            return;
        }
        for (int i = start; i < end; ++i) {
            swap(nums, start, i);
            helper(nums, start + 1, end, res);
            swap(nums, start, i);
        }
    }

    public void swap(int[] nums, int index1, int index2) {
        if (index1 != index2) {
            int tmp = nums[index1];
            nums[index1] = nums[index2];
            nums[index2] = tmp;
        }
    }


版权声明:本文为pubgNO1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。