Javascript节点ES6组合/置换算法

Javascript节点ES6组合/置换算法,javascript,algorithm,combinations,permutation,ecmascript-6,Javascript,Algorithm,Combinations,Permutation,Ecmascript 6,小挑战 目标(nodeJS,loop是使用“屈服”策略的*交互函数) 限制条件: 仅在minChars和maxChars之间生成字符串组合长度 不得消耗所有内存(不允许存储中的数组) 必须使用ES6迭代器,因此可以逐步执行 允许递归 可以提供数十亿的组合 样本输出(顺序很重要): 简单的解决方案: function* loop(alphabet, min, max) { if (min > max) throw new RangeError("max needs to b

小挑战


目标(nodeJS,loop是使用“屈服”策略的*交互函数)


限制条件:

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

样本输出(顺序很重要):

简单的解决方案:

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;
}
函数*循环(字母、最小值、最大值){
如果(最小值>最大值)抛出新的RangeError(“最大值需要大于最小值”);
如果(最小0)
for(循环的常量剩余部分(字母表,最小值-1,最大值-1))
for(字母表常数a)
剩余收益+a;
}

()

生成时间并不重要我正在寻找代码解决方案,是的。我没有成功:(我的大脑不适合……Stackoverflow不是一个为你编码的地方。如果你在问题中包含你迄今为止尝试过的代码,那么你将有更好的机会获得help@user1815190:至少让我们看看你的尝试。你能解释一下如果(min@idbehold:这是递归的基本情况。
循环(…,0,0)
确实有空字符串作为唯一的组合,而
循环(…,0,…)
从它开始。无可否认,只允许
min
max
的非负值可能更简洁(更直观)。
a
b
c
[...]
z
aa
ab
ac
[...]
aaa
aab
aac
[...]
aba
abb
abc
[...]
bza
bzb
bzc
[...]
zzzzzzzzzz
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;
}