原地旋转图像

这道题呢是需要在原矩阵上旋转,所以我们只能用一个temp来交换位置,那么我们用n=4的这个矩阵来推理
我们从5开始,可以发现5换到了11的位置,11换到了16的位置,16换到了15的位置,15换到了5的位置。即:
5-->11
11-->16
16-->15
15-->5
所以每次旋转就是4个数字在交换,交换值很容易,用一个temp就可以
但是我们要找出4个数字的坐标关系
我们取更具代表性的13-->1 12->13 10-->12 1-->10来举例
然后我们把这4个数的坐标写出
1: m[0][1] 13:m[2][0] 12:m[3][2] 10:m[1][3]
还是很难看出规律 再取2-->9 14-->2 7-->14 9-->7 写出坐标
9:m[0][2] 2:m[1][0] 14:[3][1] 7:m[2][3]
可以发现第1个数和第3个数,第2个数和第4个数对称。即x相加等于3,y相加等于3,第2个数的y是第1 个数的x,第2个数的x加第1 个数的y等于3
所以4个数的坐标依次为m[i][j] m[(n-1)-j][i] m[(n-1)-i][(n-1)-j] m[(n-1)-((n-1)-j)][(n-1)-i]=m[j][(n-1)-i]


最后一个问题就是怎么循环?
n=3时
当i=0,j=0,1
当i=1时,j=1 已经遍历了

n=4时
当i=0时 j=0,1,2
当i=1时 j=1,2 已经遍历了

 n=5时
当i=0时 j=0,1,2,3
当i=1时 j=1,2 ,3
当i=2时 j=2 已经遍历了

可以发现i<n/2, j从i开始取,j<n-i-1结束 代码如下

void rotate(int** matrix, int matrixSize, int* matrixColSize){
for(int i=0;i<matrixSize/2;i++){
for(int j=i;j<matrixSize-i-1;j++){
int temp=matrix[i][j];
matrix[i][j]=matrix[matrixSize-1-j][i];
matrix[matrixSize-j-1][i]=matrix[matrixSize-i-1][matrixSize-j-1];
matrix[matrixSize-i-1][matrixSize-j-1]=matrix[j][matrixSize-1-i];
matrix[j][matrixSize-1-i]=temp;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝味啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值