【题解】【矩阵】【回溯】【Leetcode】Rotate Image

本文介绍了一个简单的方法来实现图像的90度顺时针旋转。通过循环交换矩阵中的元素,可以在原地完成图像的旋转,而不需要额外的空间。该方法适用于任何尺寸的正方形图像。

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:
Could you do this in-place?

思路:

每次转着圈挪四个元素,这步只需要一个int的额外空间,想象一个方阵

NewImage

哦不好意思,这个太不专业了,咱换个大一点6×6的

NewImage

草图上比划比划第二层的元素怎么移动,一次Accept的感觉好爽

代码:

 1 void rotate(vector<vector<int> > &matrix) {
 2     int n = matrix.size();
 3     if(n < 2) return;
 4     
 5     for(int layer = 0; layer < n/2; layer++){
 6         for(int i = layer; i < n-1-layer; i++){//避免重复处理n-1-layer
 7             int leftTop = matrix[layer][i];//注意二维矩阵的(i,j)index与数学坐标(x,y)中是相反的
 8             matrix[layer][i] = matrix[n-1-i][layer]; //先在纸上想清楚赋值的先后循序
 9             matrix[n-1-i][layer] = matrix[n-1-layer][n-1-i];
10             matrix[n-1-layer][n-1-i] = matrix[i][n-1-layer];
11             matrix[i][n-1-layer] = leftTop;
12         }
13     }
14 }

 

转载于:https://www.cnblogs.com/wei-li/p/RotateImage.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值