萌新记录一下历时好几个小时,更换了很多思路完成了这道题:
以下是代码:
运行结果:
小小的骄傲一下~
一点点总结:
- 图片在计算机中以矩阵的形式存储(二维数组)
- 旋转矩阵时,在不开辟新空间的前提下,交换矩阵两个元素,使用三次异或,后者相加再减去的形式.
三次异或:a=ab;b=ab;a=a^b;
相加再减去:a=a+b;b=a-b;a=a-b; - 若是向右旋转90°,简单的可以使用程序的方法
还有一种尝试过的思路:需要选定一个起点元素然后逆时针交换N-1次(N*N矩阵),但是这种方法很繁琐,我只做到了对角线交换.
例如: 1 2 3 4
5 6 --> 7 8
....↓.....↑
9 10 -->11 12
13 14 15 16
向右旋转90度,6要交换到7的位置,
可以三次异或,6<->(交换)7,但是程序会出错
这里尝试了逆时针6<->10,6<->11,6<->7的方式,可以实现.等交换完后7 10 11都到了需要的位置.
简言之就是6换7可以直接换,也可以绕远路换,这种方式支持每一个元素. - 若是向左旋转90度则相反,7顺时针绕远路交换.