欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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’

03字符串的排列组合
参考题解
代码
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();
        }
    }
};
相关标签: 算法