假设我有这个数组:
a = [1,2,3,4,5];
输出应该是这样的:
1,2,3,4,5
2,1,3,4,5
3,1,2,4,5
4,1,2,3,5
5,1,2,3,4
我该怎么做?此函数应对a
的不同长度有效。
答案 0 :(得分:9)
使用组合:
b = [a.' flipud(nchoosek(a,numel(a)-1))];
答案 1 :(得分:3)
一个简单的解决方案可以是:
primarySet = 1:5;
result = zeros(length(primarySet));
for i = 1: length(primarySet)
temp = primarySet;
temp(i) = [];
result(i,:) = [primarySet(i) temp];
end
答案 2 :(得分:3)
另一种方式:
a = [10 20 30 40 50];
ind = 1:numel(a);
result = a(abs(sort(bsxfun(@times, ind, 1-2*eye(numel(ind))),2)));
给出
result =
10 20 30 40 50
20 10 30 40 50
30 10 20 40 50
40 10 20 30 50
50 10 20 30 40
答案 3 :(得分:2)
另一种方式:
n = numel(a)-1;
b = [a(:) flipud(reshape(ndgrid(a,1:n).',[],n))];
b =
1 2 3 4 5
2 1 3 4 5
3 1 2 4 5
4 1 2 3 5
5 1 2 3 4