回溯法
一、子串
public static void main(String[] args) {
int[] nums = {1, 2, 3};
List<List<Integer>> lists = permute(nums);
System.out.println(lists);
}
public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> llist = new ArrayList<>();
get1(nums, llist, new ArrayList<Integer>(), 0);
return llist;
}
public static void get1(int[] nums, List<List<Integer>> llist, List<Integer> list, int index) {
llist.add(new ArrayList<Integer>(list));
for (int i = index; i < nums.length; i++) {
list.add(nums[i]);
get1(nums, llist, list, i + 1);
list.remove(list.size() - 1);
}
}
结果:
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
二、全排序
public static void main(String[] args) {
int[] nums = {1, 2, 3};
List<List<Integer>> lists = permute(nums);
System.out.println(lists);
}
public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> llist = new ArrayList<>();
get1(nums, llist, new ArrayList<Integer>(), 0);
return llist;
}
结果:
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]