03字符串的排列组合
程序员文章站
2022-07-14 18:49:28
...
题目描述
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
来源:力扣(LeetCode)
思路
以字符串“abc”为例,如下图:
一开始是空字符串’’,可选择的有三个字符’a’、‘b’,‘c’
-
a,剩余‘b’、‘c’
- ab,剩’c’
- ac,剩’b’
-
b,剩余’a’、‘c’
- ba,剩’c’
- bc,剩’a’
-
c,剩余’a’、‘b’
- ca,剩’b’
- cb,剩’a’
参考题解
代码
1.字符串
/**
* @param {string} s
* @return {string[]}
*/
var permutation = function(s) {
let res = [];
dfs('', s);
return Array.from(new Set(res));
function dfs(select, left) {
if(left=='') {
res.push(select);
return;
}
for(let i=0,len=left.length; i<len; i++) {
dfs(select+left[i], left.slice(0,i)+left.slice(i+1));
}
}
};
2.借助数组
/**
* @param {string} S
* @return {string[]}
*/
var permutation = function (S) {
let arr = S.split('');
let result = [];
trackback([], arr);
return result;
function trackback(track, arr) {
if (!arr.length) {
result.push([...track].join(''));
return result;
}
for (let i = 0; i < arr.length; i++) {
if(arr[i]==arr[i-1]) continue;
track.push(arr[i]);
trackback(track, arr.filter((item, index) => index != i));
track.pop();
}
}
};
上一篇: 02字符串的练习(03)
下一篇: 03字符串的扩展