首页 文章

如何使用所有ascii字符生成所有可能的字符串到一定长度

提问于
浏览
0

我今天一直在苦苦挣扎,尝试创建一个函数,它可以生成所有可能的字符串,所有可能的ascii字符,达到一定的长度 .

所以基本上,首先是一个字符,从0到255 . 然后两个我获得AA,然后是AB,然后是AC ......等(但是使用ascii字符代码,以获得每个点中的所有可能值) .
那有意义吗?

我想我在递归时很糟糕,因为我所做的每一次尝试都会让我自己弄得太复杂,或者最终只会增加我的字符串中的最后一个位置 .

我在做什么 .
我似乎也是同样的问题 .

我会对任何例子感到满意,它不一定是javascript .

帮助我stackoverflow,你是我唯一的希望 .

2 回答

  • 0

    你可以使用一个生成器,递归地构建字符串并将结果产生给调用者:

    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);
         }
     })();
    
  • 2

    我想我在递归时很糟糕

    您似乎在寻找递归解决方案 .

    这个伪代码可能会解决你的问题吗?

    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字符数组 .

相关问题