我今天一直在努力,试图创建一个函数,该函数可以生成所有可能的字符串以及所有可能的ascii字符,直到一定长度。
因此,基本上,首先是0-255之间的单个字符。然后是两个,我得到AA,然后是AB,然后是AC ...等等(但是使用ascii字符代码,以获得每个位置的所有可能值)。
这有道理吗?
我想我很讨厌递归,因为我所做的每一次尝试要么变得太复杂以至于我自己都无法弄清楚,要么最终只是增加了字符串中的最后一个位置。
我完全被困在这里,失去了对我所做工作的所有了解。 我尝试了无济于事的搜索,通常最终出现在看起来不太一样的同一篇文章中。
我会对任何示例感到满意,不一定非要使用javascript。
帮助我stackoverflow,您是我唯一的希望。
答案 0 :(得分:2)
您可以使用生成器,该生成器以递归方式构建字符串并向调用者提供结果:
function* chars() {
for(let i = 0; i < 255; i++)
yield String.fromCharCode(i);
}
function* combinations(length, previous = "") {
if(length <= 0) {
yield previous;
return;
}
for(const char of chars())
yield* combinations(length - 1, previous + char);
}
这样,您可以获得的所有组合为:
const result = [...combinations(5)];
请注意,255 ** n
太多了,因此您可能想要一个接一个地使用这些组合:
const timer = ms => new Promise(res => setTimeout(res, ms));
(async function() {
for(const combo of combinations(5)) {
console.log(combo);
await timer(1);
}
})();
答案 1 :(得分:0)
我想我很讨厌递归
您似乎正在寻找递归解决方案。
此伪代码可以解决您的问题吗?
F(n)
if (n == 1)
return asciiCharacters
suffixes = F(n - 1)
for each character of asciiCharacters
for each suffix of suffixes
results.push(character + suffix)
return results
其中asciiCharacters
是ASCII字符数组。