问一个问题,递归求全排列
import java.util.ArrayList;
public class Permute {
public static void main(String[] args) {
int[] num = { 1, 2, 3 };
System.out.println(permute(num));
}
public static ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
getPermute(result, num, 0);
return result;
}
public static void getPermute(ArrayList<ArrayList<Integer>> result, int[] num, int start) {
if (start == num.length) { //此处num.length-1,得出的结果也是一样的两者有什么区别么
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < num.length; i++) {
list.add(num[i]);
}
result.add(list);
} else {
for (int i = start; i < num.length; i++) {
swap(num, i, start);
getPermute(result, num, start + 1);
swap(num, i, start);
}
}
}
public static void swap(int[] nums, int i, int j) {
int temp;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
public class Permute {
public static void main(String[] args) {
int[] num = { 1, 2, 3 };
System.out.println(permute(num));
}
public static ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
getPermute(result, num, 0);
return result;
}
public static void getPermute(ArrayList<ArrayList<Integer>> result, int[] num, int start) {
if (start == num.length) { //此处num.length-1,得出的结果也是一样的两者有什么区别么
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < num.length; i++) {
list.add(num[i]);
}
result.add(list);
} else {
for (int i = start; i < num.length; i++) {
swap(num, i, start);
getPermute(result, num, start + 1);
swap(num, i, start);
}
}
}
public static void swap(int[] nums, int i, int j) {
int temp;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}