当前位置: 首页 > 面试题库 >

具有置换长度参数的javascript置换生成器

严阳夏
2023-03-14
问题内容

我已经看到了一些生成器,但是它们都构成一个平方矩阵。例如,您给它一个包含三个项目的列表,并假定长度的输出也是三个。但是,我想指定项目和长度。

听起来像是一个简单的问题,无法相信没有可用的库。如果那里有经过测试的库,希望避免自己编写。任何建议都很好。

我发现的例子

var list = 'abc';
perms = permutations(list);
//you cannot define the length

var list = 'abc';
var length = 3;

perms = permutations(list,length);

console.log(perms);

/* output
a,a,a
a,b,c
a,b,a
a,c,a
c,a,a
...
*/

我希望能够更改长度,并应相应地创建排列

length = 2

a,a
a,b
b,b
b,a

length = 4

a,a,a,a 
a,a,a,b
....

问题答案:

您可以想象长度代表插槽数。假定N是初始列表中的元素数,则每个插槽都有N种可能性。因此,给定三个值[1,2,3],您将有一个总的3 x 3 x 3 = 27排列。

这是我的尝试。包含评论!

var list = [1,2,3];



var getPermutations = function(list, maxLen) {

    // Copy initial values as arrays

    var perm = list.map(function(val) {

        return [val];

    });

    // Our permutation generator

    var generate = function(perm, maxLen, currLen) {

        // Reached desired length

        if (currLen === maxLen) {

            return perm;

        }

        // For each existing permutation

        for (var i = 0, len = perm.length; i < len; i++) {

            var currPerm = perm.shift();

            // Create new permutation

            for (var k = 0; k < list.length; k++) {

                perm.push(currPerm.concat(list[k]));

            }

        }

        // Recurse

        return generate(perm, maxLen, currLen + 1);

    };

    // Start with size 1 because of initial values

    return generate(perm, maxLen, 1);

};



var res = getPermutations(list, 3);

console.log(res);

console.log(res.length); // 27

[fiddle](http://jsfiddle.net/kD8G3/)



 类似资料:
  • 问题内容: Java是否具有内置方法来置换或随机混排数字或字符数组?类似于c ++中的Random Shuffle STL? 问题答案: 您可以使用 如果您有数字数组,则可以使用:-

  • 问题内容: 我正在寻找在Swift中实现合理的C互操作性的最简单方法,而我当前的代码块是将(是)转换为数组。 当前,我有一个幼稚的算法,可以采用和一个字节,然后将其逐个元素转换为数组: 可以使用来加速循环本身,但是并不能消除循环本身的问题。 我知道这个SO问题涵盖了如何转换为,但是完全是另一种野兽。是否有一种方便的Swift方法将长度字节从中复制到中?我更希望使用纯Swift方法,而不要通过或类似

  • 问题内容: 假设我需要一个3位数的电话号码,因此它类似于: 问题答案: 要获得一个随机的3位数字: (假设您实际上是指三位数,而不是“最多三位数”。) 要使用任意数量的数字: 输出:

  • 我想知道在CPP中是否已经有一个实现,可以找到长度为k(1,2,3,4等)的n个字符的所有重复排列。我希望有,但我找不到。 例如,如果并且我想找到的所有排列,重复长度为。 输出将类似于: 总排列为16。

  • 设置-Javascript|MDN 示例:迭代集 第16行 上产生错误< code >未捕获的语法错误:意外的令牌 < code >定制和控制Google Chrome 是我做错了什么还是这个功能不被支持? 更新: 我进入< code>chrome://flags并勾选了< code >启用实验性JavaScript。然后重新启动我的浏览器,但我仍然得到同样的错误。我想我只能等到那个特性被正确添加

  • 问题内容: 我有不同长度的清单清单(例如),并想将其转换成整数数组。我了解多维数组中的“子”数组必须具有相同的长度。那么将上述示例中的列表转换成这样的数组(即用零完成)的最有效方法是什么? 问题答案: 您可以使用np.zeros创建一个numpy数组,并用列表元素填充它们,如下所示。 结果是