给定字符的全排列输出算法[JAVA]
程序员文章站
2022-07-12 15:37:05
...
/* @author wenmin.h */ public class Permutation { public static void listAll(char[] arr_Str) { if(arr_Str.length<=1) { System.out.println(arr_Str[0]); return; } doPerm(0+1,arr_Str,new char[]{arr_Str[0]}); } /* index:当前要进行挨个插位的字符下标 arr_All:给定的字符数组 arr_Already:当前索引前已排好的字符数组 */ private static void doPerm(int index,char[]arr_All,char[]arr_Already) { if(index == arr_All.length-1) { for(int i = 0; i <= index; i++) { System.out.println(new String(insertAt(arr_Already,i,arr_All[index]))); } } else { for(int i = 0; i <= index; i++) { doPerm(index+1,arr_All,insertAt(arr_Already,i,arr_All[index])); } } } //指定位置插入新的字符,并将原数组中的元素往后移动 private static char[] insertAt(char[] char_Arr,int index,char c) { char[] tmp = new char[char_Arr.length+1]; for(int i = 0,j=0;i<tmp.length;i++,j++) { if(i==index) { tmp[index]= c; j--; } else { tmp[i] = char_Arr[j]; } } return tmp; } public static void main(String[] args) { if(args.length==0) { System.out.println("Nothing input!"); System.exit(0); } char[] arr_Str = args[0].toCharArray(); listAll(arr_Str); } }
命令行下执行:java Permutation ab
结果:
ba
ab
如有雷同纯属巧合 - -!
可以思考下如果输入的字符中有相同的,那么如何避免全排列的输出出现重复?
上一篇: 华为 安卓手机在MAC系统下调试模式设置
下一篇: to_char 函数