我想要一个算法来执行以下操作:当输入是例如3时,我希望生成每个3位数字,如下所示:
000
001
010
011
100
101
110
111
编辑:感谢您的所有答案,但我更喜欢将“1”和“0”视为字符并将整个答案视为字符串的算法,以便我可以扩展字符的答案同样。就像生成长度为3的a,b,c
的每个可能组合一样。
答案 0 :(得分:7)
直接的算法是:
计算2^n-1
;在您的情况下,7
。
for i = 0 : 7
将i
转换为二进制格式
输出二进制表格
答案 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文章中的代码不应该太难以使用模运算来概括所有字符。或者,您可以将字符映射到数值,计算排列,然后映射回字符。