[LeetCode]Rotate the image(在位操作!!)
2015-07-19 16:02
267 查看
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?
在位操作说明不能开辟新的空间
这种方法虽然0msAC,但是明显的开辟了空间
这里有个新的方法
Rotate the image by 90 degrees (clockwise).
Follow up: Could you do this in-place?
在位操作说明不能开辟新的空间
void rotate(int** matrix, int r, int c) { int **p = NULL; int i,j; p = (int**)malloc(sizeof(int*)*c); for(i = 0; i < c; ++i) p[i] =(int*)malloc(sizeof(int)*r); for(i = 0; i < c; ++i) for(j = 0; j<r;++j) p[i][j]=matrix[i][j]; for(i = 0; i < c; ++i) for(j = 0; j<r;++j) //p[i][j]=matrix[r-1-j][i]; matrix[i][j]=p[r-1-j][i]; }
这种方法虽然0msAC,但是明显的开辟了空间
这里有个新的方法
/* * clockwise rotate * first reverse up to down, then swap the symmetry * 1 2 3 7 8 9 7 4 1 * 4 5 6 => 4 5 6 => 8 5 2 * 7 8 9 1 2 3 9 6 3 */ void rotate(vector<vector<int> > &matrix) { reverse(matrix.begin(), matrix.end()); for (int i = 0; i < matrix.size(); ++i) { for (int j = i + 1; j < matrix[i].size(); ++j) swap(matrix[i][j], matrix[j][i]); } } /* * anticlockwise rotate * first reverse left to right, then swap the symmetry * 1 2 3 3 2 1 3 6 9 * 4 5 6 => 6 5 4 => 2 5 8 * 7 8 9 9 8 7 1 4 7 */ void anti_rotate(vector<vector<int> > &matrix) { for (auto vi : matrix) reverse(vi.begin(), vi.end()); for (int i = 0; i < matrix.size(); ++i) { for (int j = i + 1; j < matrix[i].size(); ++j) swap(matrix[i][j], matrix[j][i]); } }
相关文章推荐
- vmware centOS 开机进度条 卡死 Determining IP Information for eth0...
- Android实现推送方式解决方案
- linux中运行一个二进制的文件
- java 内存泄露小测试
- NOI 2015 DAY1 T1 程序自动分析 并查集+离散化
- Java Swing编程接口(30)---列表框:JList
- realm simple
- realm tableview
- Objective C中数组排序几种情况的总结
- SQL脚本积累之三-----case....when...的使用示例
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第九讲:块元素、行内元素、标准流、盒子模型
- 黑马程序员 About Me
- php实现网站顶踩功能的完整前端代码
- leetcode239:Sliding Window Maximum
- 欢迎使用CSDN-markdown编辑器
- 百度,360 你们谁是骗子?
- 编程中应注意的细节
- hdu 2141 Can you find it? 二分
- CAS
- Swap Nodes in Pairs