54 回溯算法求解全排列问题

问题描述:给定一个没有重复数字的序列nums,返回其所有可能的全排列。

回溯算法求解:最多进行nums.length次深度的dfs递归,每一次都从剩下未选择序列里面选取一个进行递归,使用used数组进行保存当前是否选取;

java 复制代码
public void  tranceBack(int []nums,int used[],int index,LinkedList<Integer>templist,LinkedList<LinkedList<Integer>>res)
{
if(index==nums.length){
res.add(templist);
return ;
}
for(int i=0;i<nums.length;i++)
{
if(used[i])
{
continue;
}else
{
used[i]=true;
templist.add(nums[i]);
tranceBack(nums,used,index+1,templist,res);
used[i]=false;
templist.remove(templist.size()-1);
}
}
}
public List<List<Integer>>TranceBack(int [] nums)
{
List<List<Integer>>res=new LinkedList<LinkedList<Integer>>();
Boolean [] used=new Boolean[nums.length];
tranceBack(nums,used,new LinkedList<Integer>(),res);
​​​​​​​return res;
}

而对于所有子集而言,每一次递归都保存一次结果,for循环从index开始,不需要used数组。

相关推荐
骇客野人3 分钟前
IntelliJ IDEA 使用技巧
java·ide·intellij-idea
大尚来也10 分钟前
用 Python 自动整理文件、重命名、分类电脑文件夹
开发语言·python
CVer儿11 分钟前
c++二级指针
开发语言·c++
Jul1en_30 分钟前
【Java 脚手架】封装通用工具类-1
java·spring boot·分布式·spring·spring cloud
极序时代GEO品牌优化35 分钟前
杭州极序时代|面向地域、设备与用户画像的动态GEO
人工智能·python·算法·极序时代geo
mlidongfeng1 小时前
[AI][C++26] SIMD 编程模型思考
开发语言·c++·人工智能
j7~1 小时前
【Linux】二十七.线程篇四《Linux多线程编程:线程互斥(互斥量的底层到封装)、线程安全和冲入、死锁》---详解
linux·开发语言·c++·线程安全·死锁·线程互斥·重入
关于不上作者榜就原神启动那件事1 小时前
从 MDC 到 Agent:我手搓的文档路由协议,在 Spring AI Alibaba 里找到了正式实现
java·人工智能·spring·ai·agent
啦啦啦啦啦zzzz1 小时前
贪心算法和动态规划
c++·算法·贪心算法·动态规划
刘名喜1 小时前
第09篇-协程基础-Kotlin异步编程
开发语言·kotlin·springboot