首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归生成长度为n的所有二进制字符串的最佳方法是什么?

递归生成长度为n的所有二进制字符串的最佳方法是什么?
EN

Stack Overflow用户
提问于 2013-02-14 14:03:51
回答 4查看 9.6K关注 0票数 5

我正在寻找一个很好(易于实现、直观等)的递归方法,用于生成长度为n的所有二进制字符串,其中1 <= n <= 35

我希望有一个伪代码算法的想法(没有特定于语言的技巧)。

莱:好吧,我的确是在上限问题上做得太过分了。我的目的是避免使用从11 << n的计数器二进制表示的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2013-02-14 14:15:28

下面是C++中递归的一个例子。

代码语言:javascript
复制
vector<string> answer;

void getStrings( string s, int digitsLeft )
{
   if( digitsLeft == 0 ) // the length of string is n
      answer.push_back( s );
   else
   {
      getStrings( s + "0", digitsLeft - 1 );
      getStrings( s + "1", digitsLeft - 1 );
   }
}

getStrings( "", n ); // initial call
票数 7
EN

Stack Overflow用户

发布于 2016-08-30 09:46:40

根据Divide范式,所有长度为n的二进制字符串的生成问题可分为两个子问题:打印n-1长度为0的所有二进制字符串的问题和打印n-1长度为1的所有二进制字符串的问题。因此,以下伪码解决了这个问题:

代码语言:javascript
复制
generateBinary(length, string)

if(length > 0)
    generateBinary(length-1, string + "0")
    generateBinary(length-1, string + "1")
else
    print(string)
票数 1
EN

Stack Overflow用户

发布于 2018-04-28 03:19:00

代码语言:javascript
复制
def genBins(n):
    """
       generate all the binary strings with n-length
    """
    max_int = '0b' + '1' * n
    for i in range(0, int(max_int, 2)+1, 1):
        yield str(format(i, 'b').zfill(n))

if __name__ == '__main__':

    print(list(genBins(5)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14876564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档