Javascript NodeJS ES6组合/置换算法

时间:2015-12-08 18:56:25

标签: javascript algorithm combinations permutation ecmascript-6

小小的挑战。

目标(nodeJS,循环是一个* interator函数,使用" yield"策略)

var str;
var minChars = 1;
var maxChars = 10;
for (str of loop('abcdefghijklmnopqrstuvwxyz',minChars,maxChars)) {
    console.log(str);
}

约束:

  • 仅生成minChars和maxChars之间的字符串组合长度
  • 不得消耗所有内存(不允许在商店中使用数组)
  • 必须使用ES6迭代器,因此可以一步一步
  • 允许递归
  • 可以提供数十亿的组合

示例输出(顺序很重要):

a
b
c
[...]
z
aa
ab
ac
[...]
aaa
aab
aac
[...]
aba
abb
abc
[...]
bza
bzb
bzc
[...]
zzzzzzzzzz

1 个答案:

答案 0 :(得分:3)

琐碎的解决方案:

function* loop(alphabet, min, max) {
    if (min > max) throw new RangeError("max needs to be greater than min");
    if (min <= 0)
        yield "";
    if (max > 0)
        for (const rest of loop(alphabet, min-1, max-1))
            for (const a of alphabet)
                yield rest+a;
}

Babel demo