Java求全排列(递归+回溯)

博客介绍了使用Java实现全排列的思路。先将元素存于数组,从第0位起逐个确认位置元素,待确定位置的元素可从当前位置往后选,选中后交换位置。确认一个位置后继续下一个,回溯后再选其他元素,待确定位置超出数组下标则生成一种排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

我们先把要排列的元素存到一个数组中,然后从第0位开始往后逐个确认每个位置的元素。而这个待确定的位置的元素可以是从当前位置开始往后的任意元素,我们就从当前位置开始往后选,每次选一个,将选中的元素放到这个待确定的位置上,即将他俩交换。这个位置确认后,我们就继续确认下一个位置。这样只是一种情况,我们应该回溯(相当于恢复原态,就是说我不要刚刚选的那个元素,我要选择其他还没被选过的元素),然后再给那个待确定的位置选择其他元素,直到从它开始往后的每个元素都被我们选过。当待确定的位置超出了数组下标,说明现在已经生成了一种排列。下面我们看实现代码:

/**
	 * @param arr:将排列的元素存在数组arr中
	 * @param decision:表示现在要确定第几位
	 */
	public static void fullPermutation(char[] arr, int decision) {
		// 有效性判断
		if (arr == null || decision < 0 || decision > arr.length)
			return;
		//  如果现在要确定的位置已经超出了数组下标,说明现在已经生成了一种排列
		if (decision == arr.length) {
			System.out.println(new String(arr));
			return;
		}
		//  现在要确定的位置的元素可以是数组中从当前位置开始往后的任意元素
		for (int i = decision; i < arr.length; i++) {
			// 将选取的元素放入当前要确定的位置中
			{
				char t = arr[decision];
				arr[decision] = arr[i];
				arr[i] = t;
			}
			// 确定后继续确定下一个位置
			fullPermutation(arr, decision + 1);
			// 回溯
			{
				char t = arr[decision];
				arr[decision] = arr[i];
				arr[i] = t;
			}
		}
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值