给定一个2D的NxN矩阵,将其视为同心圆。你需要找到旋转后的矩阵,其中每个圆中的元素按交替顺序顺时针和逆时针方向旋转1个位置。所有旋转都应该原地完成。
应该被转换为。
我考虑了解决方案。
1> 对于顺时针圆形旋转,请按顺序读取元素。
对于逆时针旋转圆形,按照以下顺序阅读元素。
"代码"
有没有更好的方法来解决这个问题,时间复杂度为O(n2)或更好?
2 3 4 5
1 6 7 8
4 2 1 9
5 3 2 4
应该被转换为。
1 2 3 4
4 7 1 5
5 6 2 8
3 2 4 9
我考虑了解决方案。
1> 对于顺时针圆形旋转,请按顺序读取元素。
i -> 0 to n-1 and j = 0
j -> 0 to n-1 and i = n-1
i -> n-1 to 0 and j = n-1
j -> n-1 to 0 and i = 0
对于逆时针旋转圆形,按照以下顺序阅读元素。
j -> 0 to n-1 and i = 0
i -> 0 to n-1 and j = n-1
j -> n-1 to 0 and i = n-1
i -> n-1 to 0 and j = 0
"代码"
for(int cnt = 0; cnt < n/2; cnt++)
{
if(cnt%2 == 0) // Clockwise
{
i = cnt; j = cnt;
// while loops for each case
}
else // anti-clockwise
{
i = cnt; j = cnt;
// while loops for each case
}
}
有没有更好的方法来解决这个问题,时间复杂度为O(n2)或更好?