打印全排列,字符串或整型(Java实现)
import java.util.ArrayList;
import java.util.List;
/**
* 全排列
*
* @author fangzheng
* @date 2016年9月17日 下午8:22:34
* @param <T>
*/
public class PermutationTest<T> {
public int total = 0;
private List<List<T>> sumList = new ArrayList<>();
/**
* 全排列
* @param items
* @param position
* @param len
*/
public void arrange(T[] items, int position, int len) {
if (position == len - 1) {
sumList.add(arrayToList(items));
total++;
} else {
for (int i = position; i < len; i++) {
swap(items, position, i);
arrange(items, position + 1, len);
swap(items, position, i);
}
}
}
/**
* 交换数组元素
* @param item
* @param i
* @param j
*/
public void swap(T[] item, int i, int j) {
T temp = null;
temp = item[i];
item[i] = item[j];
item[j] = temp;
}
/**
* 数组转换为List
* @param items
* @return
*/
public List<T> arrayToList(T[] items) {
List<T> itemList = new ArrayList<>();
for (int i = 0; i < items.length; i++) {
System.out.print(items[i] + " ");
itemList.add(items[i]);
}
System.out.println();
return itemList;
}
// 测试代码
public static void main(String[] args) {
PermutationTest<String> permutationTest = new PermutationTest<>();
String[] arr = { "a", "b", "c", "d" };
permutationTest.arrange(arr, 0, arr.length);
System.out.println(permutationTest.sumList.size());
}
}