package leecode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 46. 全排列
*
* 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
*
* @author Tang
* @date 2021/12/8
*/
public class Permute {
List<List<Integer>> result = new ArrayList<>();
int[] nums;
/**
* 回溯算法
* 1.已选路径
* 2.可选列表
* 3.结束条件
*
* 循环遍历{
* 递归之前做出选择
* 执行递归()
* 递归之后撤销选择
* }
*
*
* @param nums
* @return
*/
public List<List<Integer>> permute(int[] nums) {
this.nums = nums;
//已选列表
List<Integer> hasChooseList = new ArrayList<>();
track(hasChooseList);
return result;
}
/**
* 递归
*/
private void track(List<Integer> hasChooseList) {
//完成一次排列 更新结果
if(hasChooseList.size() == nums.length) {
Object[] array = hasChooseList.toArray();
List list = Arrays.asList(Arrays.copyOf(array, array.length));
result.add(list);
return;
}
//找出nums中没有的元素
for (int num : nums) {
if(hasChooseList.contains(num)) {
continue;
}
//递归之前做出选择 num
hasChooseList.add(num);
//执行递归
track(hasChooseList);
//递归之后撤销选择
hasChooseList.remove((Integer) num);
}
}
public static void main(String[] args) {
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步