我有一个2D数组(StartingArray
)NxN(例如3x3)。我希望我的其他两个数组(LRotateArray
和RRotateArray
)左右旋转45度StartingArray
(LRotateArray
和RRotateArray
中的每一行都是StartingArray
)中的对角线:
StartingArray:
1 2 3
4 5 6
7 8 9
LRotateArray:
1
4 2
7 5 3
8 6
9
RRotateArray:
7
4 8
1 5 9
2 6
3
我想在输入LRotateArray
时修改RRotateArray
和StartingArray
。
我找到了一个允许我生成LRotateArray
的公式:
if StartingArray[i][j]=k then L_j=i+j
if j>(N-1-i) then L_i=N-i-j else L_i=i
LRotateArray[L_i][L_j]=k
有没有简单的方法可以将LRotateArray
转换为RRotateArray
,还是我必须找到另一个类似上面的公式?
答案 0 :(得分:1)
来自RRotateArray
的恕我办公大楼StartingArray
比从LRotateArray
构建它更容易。这就是我实现两种旋转的方式:
for Row := 0 to N - 1 do
begin
for Col := 0 to N - 1 do
begin
LeftRow := Col + Row;
LeftCol := Min(Col, N - 1 - Row);
LRotateArray[LeftCol, LeftRow] := StartingArray [Col, Row];
RightRow := Col + (N - Row - 1);
RightCol := Min(Col, Row);
RRotateArray[RightCol, RightRow] := StartingArray [Col, Row];
end;
end;