字母全排列 首先可以看出,全排列其实就是阶乘,3个字母会有3阶乘种表现,4字母会有4阶乘种 上面fat的变化是有规律的 ,我们要得到全排列的做法是: 将三个字母分别作为开头,然后 调整除了第一个字符之外的位置,即fat 将后两个调整 fta 当有4个字母时,如golf,那么分别让g,o,l,f打头,当g打头是后面是olf,那就可以回到上面fat的例子 这就是递归的表现,4个字母是四种字母打头的后面是3的全排列,3个字母又是3种字母打头的后面是2的全排列 就像第一行所示 //每一级所做的事情:使得char[]中的每个元素都充当首元素 //传递规则: 把除了首字母的char[]传递下去 //归的条件: 如果全部搞完,则重头到尾打印一次 public static void main(String[] args) { String string = "123"; doAnagram(string.toCharArray(), 0, string.length() - 1); } public static void doAnagram(char[] c, int start, int end) { char temp; if (start == end) { for (int i = 0; i <= end; i++) System.out.print(c[i]); System.out.println(); } else { for (int i = start; i <= end; i++) { //把当前首元素与每个元素交换,使得每个元素都能充当首元素 temp = c[start]; c[start] = c[i]; c[i] = temp; doAnagram(c, start + 1, end); //因为当前元素被交换了,为了打印当前值,把交换的给交换回来 temp = c[start]; c[start] = c[i]; c[i] = temp; } } }