【LeetCode】48. Rotate Image解法及注释
2016-04-06 10:02
288 查看
48. Rotate Image
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?
【分析】
此题要求将一个二维矩阵旋转90度,官方认证的难度是“Medium”,个人觉得此题达不到这个Level。既然是旋转矩阵,寻找规律就很重要了,简单在草稿上画一下:
我们可以看出:对于一个N阶矩阵,旋转过后,原来的“行”变成了“列”,第i行变成了第N-i-1列,即A[i][j]-->A[j][N-i-1],但是,直接通过一重循环是不能完成转换的,细想:在第0行与第2列的交换中,我们已经改变了原来矩阵第1行中“6”和第二行“9”的位置,如此,交换后已经不满足即A[i][j]-->A[j][N-i-1]的规律,因此,在不使用额外空间的情况下通过一次变换达到目标不太现实。
鉴于上述分析,我们可以将行列的变换分步实现:首先将矩阵的行转换成列,然后再交换列的顺序,值得注意的是,第二步中列顺序的交换是一种“对折”,第0列与最后一列交换,第一列与倒数第二列交换。
A[i][j]-->A[j][N-i-1]转换为:A[i][j]-->A[j][i]-->A[j][N-i-1]
【解法】
根据上述分析,很容易写出程序:
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?
【分析】
此题要求将一个二维矩阵旋转90度,官方认证的难度是“Medium”,个人觉得此题达不到这个Level。既然是旋转矩阵,寻找规律就很重要了,简单在草稿上画一下:
我们可以看出:对于一个N阶矩阵,旋转过后,原来的“行”变成了“列”,第i行变成了第N-i-1列,即A[i][j]-->A[j][N-i-1],但是,直接通过一重循环是不能完成转换的,细想:在第0行与第2列的交换中,我们已经改变了原来矩阵第1行中“6”和第二行“9”的位置,如此,交换后已经不满足即A[i][j]-->A[j][N-i-1]的规律,因此,在不使用额外空间的情况下通过一次变换达到目标不太现实。
鉴于上述分析,我们可以将行列的变换分步实现:首先将矩阵的行转换成列,然后再交换列的顺序,值得注意的是,第二步中列顺序的交换是一种“对折”,第0列与最后一列交换,第一列与倒数第二列交换。
A[i][j]-->A[j][N-i-1]转换为:A[i][j]-->A[j][i]-->A[j][N-i-1]
【解法】
根据上述分析,很容易写出程序:
class Solution { public: void rotate(vector<vector<int>>& matrix) { if (matrix.size()==0)//矩阵为空,直接返回 return; int n = matrix.size();//求取矩阵的阶数 //沿主对角线进行交换,行列变换 for (int i=0; i<n; i++) { for (int j=0; j<i; j++) swap(matrix[i][j], matrix[j][i]); } //列序变换 for (int i=0, j=n-1; i<j; i++,j--) { for (int k=0; k<n; k++) swap(matrix[k][i], matrix[k][j]); } } };
相关文章推荐
- Thinkphp kindeditor 内容转义
- 关于lua中显示绝对时间和相对时间
- 传值和传址
- Elasticsearch::Transport::Transport::Errors::Unauthorized" error="[401]
- 九幽史程博:助力国内开发者借Win10东风出海
- NTFS For Mac系统配置有什么要求
- XmlSerializer(Type type, Type[] extraTypes) 内存泄漏
- Ajax之数据连接信息捕获
- SharePoint2013 上传文件到文档库
- spring框架学习(四)自动装配
- Linux下获取进程状态
- python 安装 setuptools Compression requires the (missing) zlib module 的解决方案
- 统计无符号整型数的二进制码中‘1’的个数
- web前端工程师
- DevExpress RibbonForm的标题栏(Title Caption)中文显示不全
- Android onTouch事件传递机制
- MyEclipse 引用 jar外包的方法
- QT5 OPenGL(二,平面图形上色)
- 把byte[]转换为String
- php 算法之切割数组,不用array_chunk(),算法之二,取数组的差值,不用array_diff()