全排列算法

给定一个字符串,输出该字符串所有排列的可能

  • 输入:abc
  • 输出:abc, acb, bca, bac, cab, cba

方法 1:递归

function permutation(str) {
    // 定义存放结果的数组
    let result = [];

    if (str.length <= 1) {
        return [str];
    }

    // 定义第一个字符串为 left
    let left = str[0];
    // 其余部分为 rest
    let rest = str.slice(1, str.length);
    let preResult = permutation(rest);
    // 对 permutation(rest)里的每一个排列进行处理
    // 将 left 插入到每一个位置中,每得到一个排列,便将它 push 到 result 里面去
    for (var i = 0; i < preResult.length; i++) {
        for (var j = 0; j < preResult[i].length + 1; j++) {
            var tmp =
                preResult[i].slice(0, j) +
                left +
                preResult[i].slice(j, preResult[i].length);
            result.push(tmp);
        }
    }

    return result;
}
console.log(permutation('abc'));
Last Updated:
Contributors: af, zhangfei