算法思想
Java源代码
/* * 若尘 */ package perm; import java.util.Arrays; /** * 全排列问题(递归) * @author ruochen * @version 1.0 */ public class GeneratiingPerm { public static int count = 0; public static void main(String[] args) { char[] arr = {'a', 'b', 'c'}; int start = 0; int end = arr.length - 1; perm(arr, start, end); System.out.println("共有 " + count + " 种排列方式"); } /** * 实现全排列 * @param arr 待求全排列数组 * @param start 开始位置 * @param end 结束位置 */ public static void perm(char[] arr, int start, int end) { if (start == end) { count++; System.out.println(Arrays.toString(arr)); } else { for (int i = start; i <= end; i++) { swap(arr, start, i); perm(arr, start + 1, end); // 为了排列不会丢失,我们这里在交换回来,使得每次都是以一个固定序列开始 swap(arr, start, i); } } } /** * 交换两个数组元素 * @param arr 数组 * @param i 第一个元素下标 * @param j 第二个元素下标 */ public static void swap(char[] arr, int i, int j) { char temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } 复制代码
public static void perm2(char[] arr, int start, int end) { if (end == 0) { System.out.println(Arrays.toString(arr)); } else { for (int i = start; i <= end; i++) { if (arr[i] == 0) { arr[i] = (char) end; perm2(arr, start, end - 1); arr[i] = 0; } } } } 复制代码