假设我有这个单元格数组:
in={'A' 'B' 'C'};
我希望在两列中将\t
的{{1}}分开排列为:
in
对于长度为4的单元格out=
'A' 'B C'
'B' 'A C'
'C' 'A B'
'A B' 'C'
'A C' 'B'
'B C' 'A'
,in={'A' 'B' 'C' 'D'}
中应该有14个不同的行,例如out
。如何获取长度为'A B' 'C D'
的任何单元格out
的{{1}}?
请注意,in
,n
等是输入的示例。期望代码一般处理字符串。 A
等可以是输入单元格B
中的元素的示例,而不是'Alice02' '_Tom'
。
答案 0 :(得分:2)
这是一个可能的解决方案:
str = {'John02' 'Alice_' '4_Tom'}
[x y]=find(dec2bin(0:2^numel(str)-1)=='1');
p = accumarray(x,y,[],@(z){sprintf('%s\t',str{z})});
out = [p(2:numel(p)/2) p(end-1:-1:numel(p)/2+1)];
如果您只使用信件,可以使用此信息:
str = 'ABCD';
[x y]=find(dec2bin(0:2^numel(str)-1)=='1');
p = accumarray(x,char(y+64),[],@(z){z.'});
out = [p(2:numel(p)/2) p(end-1:-1:numel(p)/2+1)];
结果:
out =
{
[1,1] = D
[2,1] = C
[3,1] = CD
[4,1] = B
[5,1] = BD
[6,1] = BC
[7,1] = BCD
[1,2] = ABC
[2,2] = ABD
[3,2] = AB
[4,2] = ACD
[5,2] = AC
[6,2] = AD
[7,2] = A
}
* Octave中的等效解决方案:
p = powerset('A':'D');
out = [p(2:numel(p)/2) ;p(end-1:-1:numel(p)/2+1)].';