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

相关推荐
skywalk81634 分钟前
言知项目后续方向建议
开发语言·学习·编程
测试仪器廖生1359025638511 分钟前
罗德与施瓦茨 FSP13频谱分析仪FSP30
网络·人工智能·算法
happymaker062614 分钟前
LeetCodeHot100——560.和为K的子数组
算法
阿狸猿20 分钟前
论微服务架构及其应用
java·微服务·架构
dtq042431 分钟前
C语言刷题数组5,6(求平均值,求最大值)
c语言·数据结构·算法
拉勾科研工作室37 分钟前
区块链工程毕业论文题目【249个】
开发语言·javascript
郭梧悠42 分钟前
Hash算法入门Hash冲突解决方案
算法·哈希算法
程序员黑豆1 小时前
Java中的字符串【AI全栈开发】
java
namexingyun1 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
z落落1 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#