我收到了以下问题:
编写一个函数调用zigzag,它接收一个二维数组A
并返回一个1维数组,该数组是从位置A
开始以zigzag方式遍历(1,1)
。 / p>
示例:
A =[1 2 3 4 5 6
7 8 9 1 3 4
3 4 5 6 3 1
3 4 5 6 7 8]
zigzag(A)
应该返回:
[1 2 3 4 5 6 4 3 1 9 8 7 3 4 5 6 3 1 8 7 6 5 4 3]
我解决它的方式,我不确定这是否是一个正确的方法。我很高兴知道这是否完美以及如何改进我的答案:
function B=zigzag(A)
[r,c]=size(A);
B= reshape(A’,1,:);
m=0
n=0
For r>m+2
m=m+2;
n=n+1;
For i=1:c
B(nc+i)=B(2cn-i+1);
End
End
disp(B)
答案 0 :(得分:7)
如果它能为您提供正确的输出,那么您当然可以做正确的事情。但是,我要做的是访问矩阵的偶数行,反转方向以便它们以相反的顺序显示,转置矩阵然后解开它。
我们转置它的原因是因为当我们在MATLAB中解开矩阵时,这意味着矩阵的列堆叠在一起,以便生成一个单一的向量。我们希望行堆叠在一起,并使相反的偶数行允许您进行预期的之字形。如果您希望将行堆叠在一起,则需要首先转置矩阵以使行成为列,并且当您解开此矩阵时,您将把行堆叠在彼此之上而不是创建单个载体。
这样的事情:
B = A; %// Make a copy
B(2:2:end,:) = fliplr(B(2:2:end,:)); %// Flip even rows
B = reshape(B.', 1, []); %// Unravel
以你的例子,我得到:
B =
Columns 1 through 13
1 2 3 4 5 6 4 3 1 9 8 7 3
Columns 14 through 24
4 5 6 3 1 8 7 6 5 4 3