生成每个k位数的算法是什么?

时间:2012-01-08 20:05:38

标签: algorithm

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

000
001
010
011
100
101
110
111

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

5 个答案:

答案 0 :(得分:7)

直接的算法是:

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

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

  • 输出二进制表格

答案 1 :(得分:1)

它表示0到2 ^ n-1之间的每个数字,其中n是您的位数

答案 2 :(得分:1)

以下是一些可以帮助您的伪代码:

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;
}

答案 3 :(得分:0)

也许你可以使用递归算法。这是用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位二进制数字。

但请注意,如果数字真的很大,可能会出现溢出。

希望这有帮助!

答案 4 :(得分:0)

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