算法思想:
(1)首先,我们把 n 放在的位置P[1]上,并且用子数组P[2..n]来产生前n-1个数的排列;
(2)接着,我们将 n 放在P[2]上,并且用子数组P[1]和P[3..n]来产生前n-1个数的排列;
(3)然后,我们将 n 放在P[3]上,并且用子数组P[1..2]和P[4..n]来产生前n-1个数的排列;
重复上述过程直到我们将 n 放在P[n]上,并且用子数组P[1..n-1]来产生前n-1个数的排列。
package com.wrx.Algorithmpreparation.test;
/**
* ClassName: test07
* Package: com.wrx.Algorithmpreparation.test
* Description:
* 用递归生成整数的全排列。
* 方法 2: 固定元素找位置
* 算法思想:
* (1)首先,我们把 n 放在的位置P[1]上,并且用子数组P[2..n]来产生前n-1个数的排列;
* (2)接着,我们将 n 放在P[2]上,并且用子数组P[1]和P[3..n]来产生前n-1个数的排列;
* (3)然后,我们将 n 放在P[3]上,并且用子数组P[1..2]和P[4..n]来产生前n-1个数的排列;
* 重复上述过程直到我们将 n 放在P[n]上,并且用子数组P[1..n-1]来产生前n-1个数的排列。
* auther: Len
* CreatTime: 2023-04-03-7:43
*/
import java.util.Arrays;
public class test07 {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4};
permute(nums, nums.length);
} public static void permute(int[] nums, int n) {
if (n == 1) {
System.out.println(Arrays.toString(nums));
return;
}
for (int i = 0; i < n; i++) {
swap(nums, i, n - 1); // 将第n个数交换到当前位置
permute(nums, n - 1); // 递归生成前n-1个数的排列
swap(nums, i, n - 1); // 恢复原来的状态,以便进行下一次交换
}
}
public static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}