记某次面试所遇到的一题——实现全排列
。
首先看到这一题,我们想到的是经典算法回溯
与深度优先
的思想
例如
给定数组[1,2,3]
,求他的全排
例图
解析
- 从数组中取出第一个元素,那么在下面排的话是出了本身之外的其他元素
- 一直往下排,直到取完数组里面的所有元素
- 取完所有元素,回溯到最初的除了本身以外的任意元素
- 实现全排列
代码
const permute = function(nums){
let res = [];
dfs([]);
function dfs(path){
if(path.length === nums.length){
res.push([...path]);
return
}
for(let i = 0;i<nums.length;i++){
if(path.includes(nums[i])){
continue;
}
path.push(nums[i]);
dfs(path)
path.pop()
}
}
return rsz;
}
再来一题
给定数组:[["a","b"],["m","n"],["0","1"]]
输出:["am0","am1","an0","an1","bm0","bm1","bn0","bn1"]