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


    目录
    相关文章
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    27 1
    |
    1月前
    |
    算法 Java C语言
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    25 0
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    36 0
    |
    2月前
    |
    存储 canal 算法
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    27 0
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    24 0
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    22 0
    |
    2月前
    |
    算法 Java 索引
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    26 0
    |
    2月前
    |
    存储 算法 Java
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    23 0
    |
    2月前
    |
    算法 Java
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    22 0