描述
给定一个数字列表,返回其所有可能的排列。
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
每次固定一个元素,将其他的元素进行全排列,
例如
第一次固定1,将2,3进行全排列,得到[1,2,3]和[1,3,2];
第二次固定2,将2交换至第一位,得到[2,1,3],再对1,3进行全排列,得到[2,1,3]和[2,3,1];
第三次固定3,将3交换至第一位,得到[3,2,1],再对2,1进行全排列,得到[3,2,1]和[3,1,2].
Solution
public static List<List<Integer>> permute(int[] num) {
List<List<Integer>> lists = new ArrayList<>();
List<Integer> list = new ArrayList<>();
if (num.length == 0) {
lists.add(list);
return lists;
}
perm(num, 0, num.length - 1, lists);
return lists;
}
public static void perm(int[] nums, int k, int n, List<List<Integer>> lists) {
List<Integer> list = new ArrayList<>();
if (k == n) {
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
}
lists.add(list);
} else {
for (int i = k; i <= n; i++) {
swap(nums, k, i);
perm(nums, k + 1, n, lists);
swap(nums, k, i);
}
}
}
public static void swap(int[] num, int i, int j) {
int temp;
temp = num[j];
num[j] = num[i];
num[i] = temp;
}

这篇博客介绍了如何找到一个数字列表的所有可能排列。通过固定一个元素并对其余元素进行全排列,逐步构建所有排列组合,例如对列表[1, 2, 3]的全排列过程进行了详细说明。"
100320544,5094673,深入解析ThreadLocal的工作原理与最佳实践,"['Java', '并发编程', '线程', '内存管理', '数据结构']
1614

被折叠的 条评论
为什么被折叠?



