介绍
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。简单的来说:
给定一个没有重复数字的序列,返回其所有可能的全排列。
解决
const _permute = string => {
// 结果集数组
const res = [];
// 元素获取数组
let path = '';
// 调用backTracking函数
// 参数1:需要全排的数组 参数2:数组的长度 参数3:used数组记录当前元素是否已被使用
// 递归函数
function back(n, k, used) {
// 当获取的元素个数等于传入数组长度时(此时说明找到了一组结果)
if (path.length === k) {
// 将这组数据存进结果集数组
res.push(path);
// 结束递归
return;
}
for (let i = 0; i < k; i++) {
if (used[i]) continue; // 当前元素已被使用, 结束此次循环
path = path + n[i]; // 将符合条件的元素存进path数组
console.log(i, "--++")
console.log(path, "-----");
used[i] = true; // 并将该元素标为true,表示已使用同支
back(n, k, used);
path = path.substring(0, path.length - 1)
console.log(path, "++++");
used[i] = false;
}
}
back(Array.from(string), string.length, []);
// 返回最后的结果
return res;
};
console.log(_permute('abc'));
const _permute = string => {
const result = []
const map = new Map()
const dfs = (path) => {
if (path.length === string.length) {
result.push(path)
return
}
for (let i = 0; i < string.length; i++) {
if (map.get(string[i])) continue
map.set(string[i], true)
path += string[i]
dfs(path)
path = path.substring(0, path.length - 1)
map.set(string[i], false)
}
}
dfs('')
return result
};
console.log(_permute('abc'));