Java 求解全排列

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解全排列相关的知识,希望对你有一定的参考价值。

一、题目

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

二、题解

该题,比较简单,对数字可以随意选,但是对顺序有要求,所以可以设置,boolean 数组表示数字是否已经被选过

三、代码

class Solution 
    List<List<Integer>> lists = new ArrayList<>();
    Deque<Integer> deque = new LinkedList<>();

    public List<List<Integer>> permute(int[] nums) 
        // 标识数组
        boolean[] flags = new boolean[nums.length];
        backTracking(nums, flags);
        return lists;
    

    public void backTracking(int[] nums, boolean[] flags) 
        // 终止条件,队列将数组元素全部存入
        if (deque.size() == nums.length) 
            lists.add(new ArrayList(deque));
        
        for (int i = 0; i < nums.length; i++) 
            // 每一个子序列,数字只能出现一次
            if (!flags[i]) 
                flags[i] = true;
                deque.addLast(nums[i]);
                backTracking(nums, flags);
                deque.removeLast();
                flags[i] = false;
            
        
    

四、总结

标识数组,标识每一位只能出现一次

以上是关于Java 求解全排列的主要内容,如果未能解决你的问题,请参考以下文章

全排列 (递归求解+字典序) java 转载

算法之使用递归求解全排列

十二:全排列-求解密码

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解