【OJ】全排列递归算法
算法思想:求n位的字符串的全排列,先确定第0位,然后对后面n-1位进行全排列,在对n-1为进行全排列时,先确定第1位,然后对后面的n-2位进行全排列...由此得到递归函数和递归的结束条件。全排列也就是交换位置,到n-2位时,就是将n-2和n-1交换位置。
例子:abc,第一位是a固定,对后面的bc交换位置得abc,acb.
当a和b交换位置之后,得到bac,对ac进行全排列bac,bca.
当a和c交换位置之后,得到cba,对ba进行全排列得cba,cab.
package test;
import java.util.Arrays;
public class quanpailie {
// 需要被全排列的数组
private static String[] arr = "a,b,c,d".split(",");
public static void main(String[] args) {
rangeAll(arr, 0);
}
/**
* 全排列指定数组
*
* @param arr
* 需要被全排列的数组
* @param n
* 记录递归的层数(从0开始)
*/
public static void rangeAll(String[] arr, int n) {
if (n == arr.length) {
// 打印数组
System.out.println(Arrays.toString(arr));
return;
}
for (int i = n; i < arr.length; i++) {
swap(arr, n, i);
rangeAll(arr, n + 1);
swap(arr, n, i);
}
}
/**
* 交换数组中指定的两个数
*
* @param arr
* @param i
* @param j
*/
public static void swap(String[] arr, int i, int j) {
if (i == j) {
return;
}
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}

浙公网安备 33010602011771号