46. 全排列 --力扣 --JAVA

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

 题目

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

解题思路

    1. 因为是全排序,所以可以先将数组转换成列表再对列表进行操纵;
    2. 通过不断固定每个位置的元素,然后递推下一个元素。

    代码展示

    class Solution {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> data = new ArrayList<>();
        public List<List<Integer>> permute(int[] nums) {
            //全排列将数组元素存放到列表中
            for (int num : nums){
                data.add(num);
            }
            dfs(0);
            return ans;
        }
        private void dfs(int index){
            if(index == data.size() - 1){
                ans.add(new ArrayList<>(data));
                return;
            }
            for (int i = index; i < data.size(); i++){
                //将data.get(i)固定在x位置;
                swap(i,index);
                //递归固定下一个元素
                dfs(index + 1);
                //撤销交换
                swap(i,index);
            }
        }
        //交换元素位置
        private void swap( int resource, int target){
            int temp = data.get(resource);
            data.set(resource,data.get(target));
            data.set(target,temp);
        }
    }

    image.gif


    目录
    相关文章
    |
    1月前
    |
    算法
    Leetcode第46题(全排列)
    这篇文章介绍了LeetCode第46题“全排列”的解题方法,使用深度优先搜索(DFS)和回溯算法来生成给定数组的所有可能排列。
    26 0
    Leetcode第46题(全排列)
    |
    1月前
    Leetcode第47题(全排列II)
    LeetCode第47题要求返回一个包含重复数字序列的所有不重复全排列,通过深度优先搜索和去重策略来解决。
    29 0
    |
    1月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java
    |
    3月前
    |
    算法
    LeetCode第46题全排列
    LeetCode第46题"全排列"的解题方法,利用回溯法避免重复并确保元素的有序性,生成所有可能的排列组合。
    LeetCode第46题全排列
    |
    3月前
    |
    算法 Java
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    52 6
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    70 2
    |
    3月前
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    50 1
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:预测赢家+香槟塔java解法
    LeetCode经典算法题:预测赢家+香槟塔java解法
    61 1
    |
    3月前
    |
    算法
    LeetCode第47题全排列II
    LeetCode第47题"全排列II"的解题方法,通过排序和添加去重逻辑,使用回溯法避免生成重复的排列组合。
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    79 0
    下一篇
    无影云桌面