今天看到了这样的一道题目,花了一个小时做了一下,用了两种解法,第二种解法空间复杂度为O(1),但思路比较复杂,大家可以一起来讨论一下~
解法一
对于方阵逆时针旋转,很容易想到的就是找出每一个数的规律,复制多一份额外的空间,然后遍历每一个位置,找出其旋转前的位置。
对于下面的方阵,有n = 3
可以知道旋转后的方阵为
即有下面变换:
(0,0) <= (0,2)
(1,0) <= (0,1)
(2,0) <= (0,0)…
可以抽象出来(i,j)<= (j,n - 1 - i),代码如下:
void matrixS(int a[length][length])
{
show(a);
int b[length][length];
for (size_t i = 0; i < length