js全排列组合算法(基于递归回溯)

function permute(nums) {

let result = []; // 存放结果的数组

function backtracking(tempList, nums) {

if (nums.length === 0) {

result.push([...tempList]); // 将当前路径添加到结果数组中

return;

}

for (let i = 0; i < nums.length; i++) {

tempList.push(nums[i]); // 选取当前元素并添加到临时列表中

const remainingNums = [...nums]; // 复制原始数组作为新的子集

remainingNums.splice(i, 1); // 移除已经处理过的元素

backtracking(tempList, remainingNums); // 进入下一层递归

tempList.pop(); // 回溯,从临时列表中删除最后一个元素

}

}

backtracking([], nums); // 调用递归函数开始计算所有排列组合

return result;

}

// 示例输入

const inputArray = [1, 2, 3];

console.log(permute(inputArray));

相关推荐
木心月转码ing1 小时前
Hot100-Day14-T33搜索旋转排序数组
算法
an317421 小时前
解决 VSCode 中 ESLint 格式化不生效问题:新手也能看懂的配置指南
前端·javascript·vue.js
Lee川3 小时前
🚀《JavaScript 灵魂深处:从 V8 引擎的“双轨并行”看执行上下文的演进之路》
javascript·面试
比特鹰3 小时前
手把手带你用Flutter手搓人生K线
前端·javascript·flutter
大雨还洅下3 小时前
前端JS: 数组扁平化
javascript
奔跑路上的Me3 小时前
前端导出 Word/Excel/PDF 文件
前端·javascript
bluceli3 小时前
JavaScript异步编程深度解析:从回调到Async Await的演进之路
前端·javascript
会员源码网3 小时前
内存泄漏(如未关闭流、缓存无限增长)
算法
SuperEugene3 小时前
路由与布局骨架篇:布局系统 | 头部、侧边栏、内容区、面包屑的拆分与复用
前端·javascript·vue.js
代码煮茶3 小时前
前端网络请求实战 | Axios 从入门到封装(拦截器 / 错误处理 / 重试)
javascript