【问题标题】:What is the algorithm to produce every k-bit number?产生每个 k 位数的算法是什么?
【发布时间】:2012-01-09 11:17:43
【问题描述】:

我想要一个算法来执行以下操作:例如,当输入为 3 时,我希望生成每个 3 位数字,如下所示:

000
001
010
011
100
101
110
111

编辑:感谢您的所有回答,但我更喜欢将“1”和“0”视为字符并将整个答案视为字符串的算法,以便我可以扩展字符的答案也是。就像生成长度为 3 的 a,b,c 的所有可能组合。

【问题讨论】:

标签: algorithm


【解决方案1】:

一个简单的算法是:

  • 计算2^n-1;在你的情况下,7

  • for i = 0 : 7i 转换为二进制形式

  • 输出二进制形式

【讨论】:

    【解决方案2】:

    这意味着0到2^n-1之间的每个数字,其中n是你的位数

    【讨论】:

    • 是的,在数学上我的陈述是正确的,我的意思是我没有说 0 到 2n 包括 2n
    • 但这不也意味着你漏掉了 0 吗?因为你也没有说包括 0...:P
    • 是的,你是对的,但是这些细节很容易被扣除,这就是为什么我错过了那些部分,尽管你是对的
    【解决方案3】:

    这是一些可以帮助你的伪代码:

    function listNumbers (bits : Int) : List<String> {
      l = [];
      if (bits == 0) {
        l.append("");        
      } else {
        prev = listNumbers(bits-1);
        for (number in prev) {
          l.append("0" + number);
          l.append("1" + number);
        }
      }
      return l;
    }
    

    【讨论】:

      【解决方案4】:

      也许您可以使用递归算法。这是用 Java 编写的:

      public void printBin(String soFar, int iterations) {
          if(iterations == 0) {
              System.out.println(soFar);
          }
          else {
              printBin(soFar + "0", iterations - 1);
              printBin(soFar + "1", iterations - 1);
          }
      }
      

      你可以这样执行:

      printBin("", 3);
      

      这将为您提供所有可能的 3 位二进制数。

      但是请注意,如果数字非常多,您可能会出现溢出。

      希望这有帮助!

      【讨论】:

        【解决方案5】:

        您想要做的是generate combinations 文章中的代码不应该太难用模运算概括所有字符。或者,您也可以将字符映射到数值,计算排列,然后映射回字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 2014-08-22
          • 1970-01-01
          • 2020-12-16
          • 1970-01-01
          • 1970-01-01
          • 2015-12-13
          相关资源
          最近更新 更多