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

相关推荐
临期冰淇淋4 分钟前
MTK平台 安卓16 GMS报错修改
android·java·前端
人道领域5 分钟前
【面试八股速通篇01】锁与并发工具
java·开发语言·面试·c#
Wang's Blog6 分钟前
Java 项目实战: 交友项目 - Dubbo 入门案例全流程复盘
java·dubbo·交友
kimnoic7 分钟前
PHP 8.3 数据库备份失败怎么排查
开发语言·php
bnmoel8 分钟前
C++ 基础入门篇(六)类和对象-第三篇:运算符重载
开发语言·c++·算法·语法·运算符重载
CRMEB系统商城14 分钟前
CRMEB开源商城系统(PHP)v8.0,打造全新AI二开商城底座!
开发语言·人工智能·小程序·开源·php
宇卿.16 分钟前
C#字段、属性、索引器、常量
开发语言·计算机视觉·c#
菜鸟~noob23324 分钟前
【电子战】第31篇:3D AOA 定位——方位+俯仰联合
开发语言·matlab·3d
wuyk55528 分钟前
28 搜索引擎索引更新:从 LSM Tree 到布隆过滤器的高效实现
stm32·单片机·嵌入式硬件·算法
小七在进步29 分钟前
初识C++中的模板
java·开发语言·c++