求一个数组的全部排列组合

给定一个数组,元素不重复,返回它的所有排列组合。

例如输入:[1,2,3]

返回[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

解题思路:

通过回溯,穷举的方式获取全排列组合

/**
 * 给定一个不重复元素的数组,返回它的全排列
 */
public class TestFull {
    public List<List<Integer>> arrFullList(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        LinkedList<Integer> board = new LinkedList<>();
        backtrack(res, board, nums);
        return res;
    }

    public void backtrack(List<List<Integer>> res, LinkedList<Integer> board, int[] nums) {
        //满足结束条件
        if (board.size() == nums.length) {
            res.add(new LinkedList(board));
            return;
        }
        //选择列表
        for (int num : nums) {
            //排除不符合的选项
            if (board.contains(num)) {
                continue;
            }
            //做选择
            board.add(num);
            //回溯
            backtrack(res, board, nums);
            //撤销选择
            board.removeLast();
        }
    }

    @Test
    public void fullTest() {
        int[] nums = {1,2,3};
        List<List<Integer>> res = arrFullList(nums);
        System.out.println(res);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值