38. 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
答案
解题思路
以 qwe 为例, 第一次:q、w、e,将每个字母作为第一个字符 第二次:qw、qe、wq、we、eq、ew,在第一次的基础上,将原排列中没出现过的字母依次追加到后面作为排列 第三次:qwe、qew、wqe、weq、eqw、ewq,在第二次的基础上,将没出现过的字母依次作为排列,长度等于 3 了,则都放入答案数组,return
var permute = function(nums) {
let res = [];
function backTrace(path) {
if(path.length === nums.length) return res.push(path.slice().join('')); // 字符串
// if(path.length === nums.length) return res.push(path.slice()); // 数组
for (let i = 0; i < nums.length; i++) {
// 将路径中没出现过的字母,拼接到路劲,再次组合
if(path.indexOf(nums[i]) === -1) {
path.push(nums[i]);
backTrace(path);
path.pop(); // 全部删除
}
}
}
backTrace([]);
return res;
};
var str = 'abc'
console.log(permute(str))