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数组。

相关推荐
宋哥转AI5 分钟前
@Tool写了但tools/list为空?Spring AI MCP Server注册的两种路径和四个坑
java·agent·mcp
程序喵大人6 分钟前
【C++并发系列】第一章:多线程读写同一个变量为什么会出错
开发语言·c++·多线程·并发
xiaoshuaishuai89 分钟前
C# vCenter跨云迁移的核心问题
开发语言·c#
zhengzhouliuhaha23 分钟前
智能医疗设备控费系统:以全院一体化管控,筑牢医疗资源“安全阀”
大数据·数据结构·人工智能·算法·安全·机器学习·软件需求
June`25 分钟前
CUDA程序效率如何计算以及工具如何使用
算法·cuda
兰令水28 分钟前
leecodecode【树形DP】【2026.6.11打卡-java版本】
java·算法·深度优先
骑士雄师34 分钟前
19.3 langgraph的工作节点和路由函数
java·前端·数据库
装不满的克莱因瓶35 分钟前
RLHF中的PPO算法——大语言模型对齐优化的核心引擎
人工智能·python·深度学习·算法·机器学习·语言模型·自然语言处理
fox_lht1 小时前
14.6.将错误重定向到标准错误
开发语言·后端·学习·rust
SWAGGY..1 小时前
Linux系统编程:(十三)环境变量
java·linux·算法