给定一个没有重复数字的数列,返回其所有可能的全排列

给定一个没有重复数字的数列,返回其所有可能的全排列

在这里插入图片描述

思路

递归和循环相结合,每次选择一个元素作为首元素,其余元素全排列。
public static void main(String[] args) {
        sort();
    }

    /**
     * 给定一个没有重复数字的序列,返回其所有可能的全排列
     */
    private static void sort() {
        List<Integer> ori = Arrays.asList(1, 2, 3,4,5);
        int size = ori.size();
        recursive(ori,size);
    }

    /**
     * 递归
     */
    private static List<List<Integer>> recursive(List<Integer> ori,int size) {
        if (ori.size() == 1) {
            List<List<Integer>> res = new ArrayList<>();
            res.add(ori);
            return res;
        }
        List<List<Integer>> son = new ArrayList<>();
        for (Integer ele : ori) {
            List<Integer> copy = new ArrayList<>(ori);
            copy.remove(ele);
            for (List<Integer> sonList : recursive(copy,size)) {
                List<Integer> combine = new ArrayList<>();
                combine.add(ele);
                combine.addAll(sonList);
                son.add(combine);
                if (combine.size()==size){
                System.out.println(combine);}
            }
        }
        return son;
    }
    

版权声明:本文为hu_jia_neu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。