JAVA学习-练习试用Java实现“全排列”

问题:

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

示例:

输入: [1,2,3]

输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]

解答思路:

使用回溯算法生成全排列的 Java 代码:

import java.util.ArrayList;

import java.util.List;



class Permute {

    private List<List<Integer>> result = new ArrayList<>();



    public List<List<Integer>> permute(int[] nums) {

        backtrack(new ArrayList<>(), nums);

        return result;

    }



    private void backtrack(List<Integer> current, int[] nums) {

        if (current.size() == nums.length) {

            result.add(new ArrayList<>(current));

            return;

        }



        for (int i = 0; i < nums.length; i++) {

            if (!current.contains(nums[i])) {

                current.add(nums[i]);

                backtrack(current, nums);

                current.remove(current.size() - 1);

            }

        }

    }



    public static void main(String[] args) {

        Permute permute = new Permute();

        int[] nums = {1, 2, 3};

        List<List<Integer>> permutations = permute.permute(nums);

        for (List<Integer> permutation : permutations) {

            System.out.println(permutation);

        }

    }

}

       上述代码使用回溯法遍历排列树,通过递归的方式从左到右枚举每个空位,然后选择一个未被使用过的数字填入,并将该数字从可选数字列表中移除。当填满所有位置后,得到一个排列,并将其加入结果列表中。最后,通过遍历结果列表并输出每个排列,得到示例中的全排列结果。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值