转载请注明出处:http://blog.csdn.net/tyhj_sf/article/details/53750171
最近项目的一个小问题,求数组元素的全排列(每个元素值都不一样),目前考虑用最简单的递归方法实现。递归方式实现也有一些弊端,比如数组元素比较多时可能导致栈溢出的错误。
递归算法实现看下面的代码:
public class Test {
static String[] array = { "A", "B", "C", "D" };
public static void main(String[] args) {
getAllOrder(0, array.length - 1);
}
public static void getAllOrder(int begin, int end) {
if (begin == end) {
// 其中一个排列拿到了,可以进行你的处理了,比如向console打印输出。
System.out.println(Arrays.toString(array));
} else {
for (int i = begin; i <= end; i++) {
// 交换数据
swap(begin, i);
getAllOrder(begin + 1, end);
swap(i, begin);
}
}
}
public static void swap(int from, int to) {
// 这里应该加上各种防止无效交换的情况
// 比如位置相同,或者2个位置的数据相同
if (from == to || array[from] == array[to]) {
return;
}
String tmp = array[from];
array[from] = array[to];
array[to] = tmp;
}
}