回溯算法全排列

本文介绍了一个Java程序,通过回溯算法实现从数字1、2、3中生成所有全排列的方法,使用递归和数组操作实现排列生成并打印结果。

"全排列"是数学中的一个概念,指的是从给定集合中取出所有元素的所有排列方式。在这个问题中,我们需要实现一个方法,该方法能够生成数字1、2和3的所有全排列。

以下是一个简单的Java实现:

	import java.util.*;  

	public class Main {  

	    public static void main(String[] args) {  

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

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

	        for (List<Integer> integers : permute) {  

	            System.out.println(integers);  

	        }  

	    }  

	  

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

	        List<List<Integer>> output = new ArrayList<>();  

	        ArrayList<Integer> nums_list = new ArrayList<Integer>();  

	        for (int num : nums) {  

	            nums_list.add(num);  

	        }  

	        int n = nums.length;  

	        backtrack(n, nums_list, output, 0);  

	        return output;  

	    }  

	  

	    public static void backtrack(int n, ArrayList<Integer> nums, List<List<Integer>> output, int first) {  

	        if (first == n) {  

	            output.add(new ArrayList<Integer>(nums));  

	        }  

	        for (int i = first; i < n; i++) {  

	            Collections.swap(nums, first, i);  

	            backtrack(n, nums, output, first + 1);  

	            Collections.swap(nums, first, i);  

	        }  

	    }  

	}

这个程序首先创建一个包含1、2和3的数组,然后通过permute方法计算全排列。permute方法使用回溯算法来生成所有可能的排列,每次递归地交换数组中的两个元素,直到所有的元素都被交换过。最后,将生成的排列添加到结果列表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值