一、题目地址
1、该题需要注意的点,就是给定的字符串,存在重复元素,即存在重复元素的回溯算法,做法区别于下面全排列算法:
https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/
二、全排列算法
1、无存在重复元素的回溯算法:
https://blog.csdn.net/weixin_45727472/article/details/119089918
三、具体代码
/**
* @param {string} s
* @return {string[]}
*/
var permutation = function(s) {
let str = s.split("");
let newStr = '';//newStr为每一项的结果
let res = [];//用于存放最后的结果
if(str.length <= 0) {
return [];
}
var dfs = function(str, newStr) {
let visited = new Set();//用于存放已经遍历的字符
if(str.length === 1) {
//因为此时str的长度只有1了,所以是str[0]
res.push(newStr + str[0])
}
for(let i=0; i<str.length; i++) {
if(visited.has(str[i])) continue;
visited.add(str[i]);
let char = str.splice(i, 1).join("");
newStr += char;//加入的字符串
dfs(str, newStr);
str.splice(i, 0, char);
newStr = newStr.slice(0, -1)//减去新的字符串
}
}
dfs(str, newStr);
return res;
};