Javascript 字符串全排列组合方法实现

Javascript 字符串全排列组合方法实现

    • 一、目标:
    • 二、思路:
    • 三、代码:

一、目标:

把一个字符串中的字符重新排列生成新的字符串,例如, abc 总共有6种排列 (abc, acb, bac, bca, cab, cba)。

二、思路:

  1. 本文章只研究全排列的情况,比如,还是 abc 字符串,3个字符,则总共的排列组合方式应该有 n! 种,此处的 n 为3,则计算出来应该是6种。本文采用递归方式实现,基本思路是通过双循环来实现递归的主逻辑部分,外层循环 str,内层循环 n - 1 时的返回数组 preResult 部分,算法逻辑如下方流程图。
  2. 首先,考虑递归如何产生,假如当 n = 1,即传参 str 的长度只有1时,则直接返回只有 str 的数组;当 n > 1时,则考虑 nn - 1 方法返回数组的关系。可以想到,n 时多出的一个字符,来添加到 n - 1 返回数组中每个字符串的头部。
Created with Raphaël 2.2.0 开始 n > 1 ? 循环 str,确定组合的第一个字符 c 去掉 str 中的 c,剩下的字符按原组合赋值给 newStr(长度 n - 1) 递归 newStr ,赋值给变量 l 循环 l ,将 c 和 l 中的字符串拼接,并 push 到 result 数组中 结束 return [str] yes no

三、代码:

// perm function
  var perm = function(s) {
    var result = [];
    if (s.length <= 1) {
      return [s];
    } else {
      for (var i = 0; i < s.length; i++) {
        var c = s[i];
        var newStr = s.slice(0, i) + s.slice(i + 1, s.length);
        var l = perm(newStr);
           
        for (var j = 0; j < l.length; j++) {
          var tmp = c + l[j];
          result.push(tmp);
        }
      }
    }
    return result;
  };  

感兴趣的同学可以一起讨论优化~

你可能感兴趣的:(Javascript)