js输入一个字符串,打印出该字符串中,所有字符的排列组合(超清晰)

一、题目

输入一个字符串,打印出该字符串中,所有字符的排列组合。

输入:'abc'

输出:['abc', 'acb', 'bca', 'bac', 'cab', 'cba']

二、思路

回溯算法。其核心思想是通过递归的方式进行深度优先搜索,当发现当前的选择不符合要求时,进行回退(即回溯)到上一个状态,并继续尝试其他的选择。通常适用于组合问题、排列问题、选择问题等需要搜索所有可能解的情况。

1. 创建一个空数组 result 用于存储生成的排列组合。

2. 定义一个辅助函数 permute,它接收两个参数:当前已形成的排列组合 current 和剩余的字符数组 remaining

3. 如果 remaining 数组为空,表示已经处理完所有字符,将 current 加入到 result 数组中。否则,遍历 remaining 数组,每次取出一个字符,将其追加到 current 中,并从 remaining 数组中移除该字符。然后,递归调用 permute 函数,传入更新后的 current 和 remaining 数组。

4. 在每一轮迭代中,需要进行回溯操作,即将已处理的字符重新加入到 remaining 数组,并将其从 current 中移除,以便尝试其他可能的组合。

5. result 数组去重

扫描二维码关注公众号,回复: 15535890 查看本文章

三、代码

    const str = 'abc'
    function getPermutations(str) {
        const result = [];

        function permute(current, remaining) {
            if (remaining.length === 0) {
                result.push(current);
            } else {
                for (let i = 0; i < remaining.length; i++) {
                    // 每次都拿出来一个放在最前面
                    const next = current + remaining[i];
                    // 删除被拿出来的那个,得到新字符串
                    const remainingChars = remaining.slice(0, i) + remaining.slice(i + 1);
                    // 新字符串递归
                    permute(next, remainingChars);
                }
            }
        }

        permute('', str);
        // 去重
        return [...new Set(result)]
    }

    // 示例用法
    const input1 = 'abb';
    const input2 = 'abc';

    console.log(getPermutations(input1));
    console.log(getPermutations(input2));

输出:

猜你喜欢

转载自blog.csdn.net/weixin_42373175/article/details/131434836