LeetCode-100题(Hot) 46. 全排列 [Java实现]

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

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]


本题不要求结果的顺序,但为保结果的广泛适用性,仍按字典序输出结果考虑。

对于本题我们可以考虑使用 回溯算法。因在一次彻底的排序过程中每个数字只能出现一次,但都需出现且位置不定,因此考虑用 for 枚举当前位次可能的每一个数的情况并用 used 数组储存当前数字是否出现的情况。实现如下:

    private int[] nums;
    private final List> result = new LinkedList<>();

    public List> permute(int[] nums) {
        this.nums = nums;
        backtrace(new ArrayList<>(nums.length), new boolean[nums.length], 0);
        return result;
    }

    private void backtrace(List array, boolean[] used, int index) {
        if (index == nums.length) {
            result.add(new ArrayList<>(array));
            return;
        }
        for (int i = 0; i < nums.length; ++ i) {
            if (!used[i]) {
                array.add(nums[i]);
                used[i] = true;
                backtrace(array, used, index+1);
                array.remove(array.size()-1);
                used[i] = false;
            }
        }
    }

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