全排列【回溯】

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

示例 1:

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

输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:

输入:nums = [1]
输出:[[1]]

class Solution {
    LinkedList<Integer> path = new LinkedList<>();
    List<List<Integer>> result = new ArrayList<>();
    boolean[] used;
    public List<List<Integer>> permute(int[] nums) {
        used = new boolean[nums.length];
        backTrack(nums, used);
        return result;
    }

    public void backTrack(int[] nums, boolean[] used) {
        //终止条件
        if(nums.length == path.size()) result.add(new ArrayList<>(path));
       
        for(int i = 0; i < nums.length; i ++) {
            if(!used[i]) {//注意添加是否使用过当前元素的判断!并且下面的添加路径、回溯过程都在该条件的前提之下,因此需要整体放入if中
                path.add(nums[i]);
                used[i] = true;
                backTrack(nums, used);
                used[i] = false;
                path.removeLast();
            }
           
        }
    }
}

你可能感兴趣的:(算法,数据结构,leetcode)