JAVA算法:给定一个没有重复数字的序列,返回其所有可能的全排列。
package com.bean.algorithm.basic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class PermuteRecursionNumber {
private void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
private void permuteRecursion(int[] nums, int start, int end, Integer[] nums_Integer, List> result) {
if (start == end) {
/*
* for(int i = 0; i temp = new ArrayList(Arrays.asList(nums_Integer));
result.add(temp);
}
for (int i = start; i <= end; i++) {
/* 交换 start和第 i个元素 */
swap(nums, start, i);
permuteRecursion(nums, start + 1, end, nums_Integer, result);
/* 交换 start和第 i个元素 */
swap(nums, start, i);
}
}
public List> permute(int[] nums) {
List> result = new ArrayList<>();
Integer[] nums_Integer = new Integer[nums.length];
permuteRecursion(nums, 0, nums.length - 1, nums_Integer, result);
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PermuteRecursionNumber prn = new PermuteRecursionNumber();
int[] nums = new int[] { 1, 2, 3, 4 };
List> list = prn.permute(nums);
Iterator> itx = list.iterator();
while (itx.hasNext()) {
List lt = itx.next();
System.out.println(lt);
}
System.out.println();
}
}
程序运行结果:
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]