Javascript - 排列和可能性

标签 javascript permutation

嗨,我正在寻找用 Javascript 生成一组字符的所有可能性。到目前为止,我的代码根据字符集“abc”和长度 3 生成此数组:

[“abc”、“acb”、“bac”、“bca”、“cab”、“cba”]

但是我想要生成的是字符集“abc”最大长度为 3 的所有可能性。a-ccc:

[“a”、“b”、“c”、“aa”、“ab”、“ac”、“ba”、“bb”、“bc”、“ca”、“cb” ,“cc”,“aaa”,“aab”,“aac”,“aba”,“abb”,“abc”....“ccc”]

这是我用来生成第一个数组的代码,任何帮助将不胜感激。

var 排列 = (function() {
    var 结果 = [];
    函数 doPermute(输入、输出、使用、大小、级别) {
        如果(大小==级别){
            var word = output.join('');
            结果.push(word);
            返回;
        }
        等级++;
        for (var i = 0; i < input.length; i++) {
            if (used[i] === true) {
                继续;
            }
            使用[i]=真;
            输出.推(输入[i]);
            doPermute(输入、输出、使用、大小、级别);
            使用[i]=假;
            输出.pop();
        }
    }
    返回 {
        getPermutations:函数(输入,大小){
            var chars = input.split('');
            var 输出 = [];
            var 使用 = new Array(chars.length);
            doPermute(字符、输出、已使用、大小、0);
            返回结果;
        }
    }
})();
功能测试(字母,大小){
    var testResults = permutate.getPermutations(字母, 大小);
    控制台.log(测试结果);
};
测试('abc',3)

最佳答案

试试这个:)

function allPermutations(letters,maxSize){
  function permutations(letters,size){
    var results=[];
    for(var i=0;i<letters.length;i++){
      var res=letters[i];
      if(size===1){
        results.push(res);
      }else{
        var rest=permutations(letters,size-1);
        for(var j=0;j<rest.length;j++){
          results.push(res+rest[j]);
        }
      }
    }
    return results;
  };
  var results=[];
  for(var i=1;i<=maxSize;i++){
    results=results.concat(permutations(letters,i));
  }
  return results;
}
console.log(allPermutations('abc',3));

http://codepen.io/anon/pen/ECHDK

关于Javascript - 排列和可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166104/

相关文章:

javascript - 更改更改值时的选择 CSS

javascript - 检测鼠标相对于元素的位置

javascript - 是否有 javascript 或 lodash 函数可以轻松迭代对或三元组

python - 在不生成所有可能性的情况下找到列表二进制值的唯一排列

javascript - 如何使用 javascript 将 json 对象附加到 html 正文? (没有 jQuery)

javascript - 使用 Firefox Scratchpad 与 node/JSFiddle 的 JSON.parse 结果不同

ruby - 无需递归或使用 Ruby/Erlang 堆栈迭代生成排列

PHP 嵌套数组组合/排列

algorithm - 'n'数字的排列顺序

algorithm - 独特的排列 - 有异常(exception)