您的位置:首页 > 其它

递归实现的全排列算法

2013-06-25 11:20 176 查看
import java.util.ArrayList;

import java.util.List;

public class Test {

public static void main(String[] args) {

String[] arr = { "1", "2", "3" };

List<Object[]> result = new ArrayList<Object[]>();

permArr(arr, 0, result);

for (int i = 0; i < result.size(); i++) {

Object[] temp = (Object[]) result.get(i);

for (int j = 0; j < temp.length; j++) {

System.out.print(temp[j]);

}

System.out.println();

}

}

public static void permArr(Object[] arr, int level, List<Object[]> container) {

if (level == arr.length - 1) {

Object[] tempArr = new Object[arr.length];

System.arraycopy(arr, 0, tempArr, 0, arr.length);

container.add(tempArr);

} else {

for (int i = level; i < arr.length; i++) {

swap(arr, i, level);

permArr(arr, level + 1, container);

swap(arr, i, level);

}

}

}

private static void swap(Object arr[], int i, int j) { // 通过临时变量,交换数据

if (i < 0 || j < 0 || i >= arr.length || j >= arr.length || i == j)

return;

Object tmp = arr[i];

arr[i] = arr[j];

arr[j] = tmp;

arr[j] = tmp;

}

}

结果:

123

132

213

231

321

312
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: