日期:2014-05-20  浏览次数:20731 次

一道面试题
一个数组中有6个字母,请代码实现打印出这些字母的所有组合。
面试

------解决方案--------------------

package com.zf.test;

import java.util.Arrays;

public class Test03 {

public static void main(String[] args) {

String[] array = {"a","b","c","d","e" ,"f"};

arrange(array , 0);
}

static void arrange(String array[] , int arrayIndex ){
if(arrayIndex == array.length - 1){
System.out.println(Arrays.toString(array));
return ;
}
for (int i = arrayIndex ; i < array.length; i++) {      
swap(array , i , arrayIndex);   
arrange(array , arrayIndex + 1) ;
swap(array , i , arrayIndex);
}
}

static void swap(String array[] , int i , int j){
String tmp = array[i];
array[i] = array[j];
array[j] = tmp ;
}

}





------解决方案--------------------
引用:
Java code?123456789101112131415161718192021222324252627import java.util.Arrays; public class Test9 {    static int count = 0;     public static void main(String[] args) {        String[] ……

发现自己写的太S了。。。
把6L的代码优化了一下,只需要进行1次交换

import java.util.Arrays;

public class Test9 {
static int count = 0;

public static void main(String[] args) {
String[] strs = new String[] { "a", "b", "c", "d", "e", "f" };
print(0, strs);
System.out.println("count:" + count);
}

static void print(int start, String[] arr) {
if (start == arr.length - 1) {
++count;
System.out.println(Arrays.toString(arr));
return;
}
for (int i = start; i < arr.length; ++i) {
print(start + 1, arr);
if (i < arr.length - 1) {
String temp = arr[0];
arr[0] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}