如何生成所有可能的组合n位字符串?

Hap*_*tal 5 matlab bit-manipulation

给定正整数n,我想在matlab中生成所有可能的n位组合.
例如:如果n = 3,那么答案应该是

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?我想将它们存储在矩阵中.我试过了

for n=1:2^4 
r(n)=dec2bin(n,5); 
end; 
Run Code Online (Sandbox Code Playgroud)

但是这给出了错误"在赋值A(:) = B中,A和B中的元素数必须相同.

And*_*ron 9

只需遍历所有整数[0,2^n),然后将数字打印为二进制.如果你总是想要n数字(例如插入前导零),这将看起来像:

for ii=0:2^n-1,
    fprintf('%0*s\n', n, dec2bin(ii));
end
Run Code Online (Sandbox Code Playgroud)

编辑:有很多方法可以将结果放在矩阵中.最简单的是使用

x = dec2bin(0:2^n-1);
Run Code Online (Sandbox Code Playgroud)

这将产生一种n类型的2^n矩阵char.每行是一个位串.

如果你真的想在每一行中存储字符串,你可以这样做:

x = cell(1, 2^n);
for ii=0:2^n-1,
    x{ii} = dec2bin(ii);
end
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在寻找有效的处理,您应该记住整数已经以二进制形式存储在内存中!所以,矢量:

x = 0 : 2^n-1;
Run Code Online (Sandbox Code Playgroud)

以最高内存效率和CPU效率的方式包含二进制模式.唯一的权衡是使用这种紧凑的表示法无法表示超过32位的模式.