【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; } }