
思路:排列问题,深度搜索+交换。
代码:
public class Permutations46 {
public static void main(String[] args) {
int[] num= {1,2,3};
System.out.println(permute(num));
}
public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ls =new ArrayList<>();
helpPermute(nums,0,ls);
return ls;
}
private static void helpPermute(int[] nums, int index, List<List<Integer>> ls) {
if(index>=nums.length)
{
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
}
ls.add(new ArrayList(list));
return;
}
for (int i = index; i < nums.length; i++) {
swap(nums,i,index);
helpPermute(nums, index+1,ls);
swap(nums,i,index);
}
}
private static void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
}
输出:
![]()

本文深入探讨了使用深度优先搜索和元素交换技巧解决排列问题的方法。通过递归调用实现全排列,每一步通过交换元素位置来生成新的排列组合,最终收集所有可能的排列结果。
7238

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



