leetcode之路048 Rotate Image
2015-11-27 17:10
218 查看
题目大意:给定一个代表图片的n*n的2d矩阵,将它顺时针旋转90,并且满足就地操作。
思路:
思路1、自己想的思路,比较复杂:对于一个点(x,y),令i=x,j=y,交换(x,y)和(j,n-i-1),即用第一个元素和旋转90度的元素交换,然后更新i,j值,将第一个元素和旋转180度的值交换,接着270度,此时结束对(x,y)的操作。改变(x,y),继续进行,直到旋转完毕。
下面是ac的代码,时间为4ms:
思路2、讨论区的思路,代码部分有注释,非常好理解,如下。
思路:
思路1、自己想的思路,比较复杂:对于一个点(x,y),令i=x,j=y,交换(x,y)和(j,n-i-1),即用第一个元素和旋转90度的元素交换,然后更新i,j值,将第一个元素和旋转180度的值交换,接着270度,此时结束对(x,y)的操作。改变(x,y),继续进行,直到旋转完毕。
下面是ac的代码,时间为4ms:
class Solution { public: void rotate(vector<vector<int>>& matrix) { int x=0,y=matrix.size()-1; int size=matrix.size(); int last_y=y; while(x<size/2) { int i=y,j=size-x-1; while(i!=x||j!=y) { swap(matrix[x][y],matrix[i][j]); int temp=i; i=j;j=size-temp-1; } --y; if(x>=y) { y=last_y-1; ++x; last_y=y; } } } };
思路2、讨论区的思路,代码部分有注释,非常好理解,如下。
/* * 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]); } }总结一下:自己实现的算法时间也很快,但是过程稍微复杂,上述算法简洁易于理解。能不能想到上述实现,重在多积累,以后得多刷题多看代码积累知识。
相关文章推荐
- Android手机通用检测指令
- MVC设计模式及其带来的优点
- Nagios and NSCA installation
- 高质量JAVA代码编写规范
- PhpStrom激活
- php xdebug配置
- 23设计模式之观察者模式(Observer)
- jquery弹出框
- 浏览器的工作原理:新式网络浏览器幕后揭秘
- Android studio asserts文件夹应该放哪儿?
- powerDesigner 从数据库导出表结构,并生产excel ,有效
- java正则表达式的应用 java读取文件并获取电话号码
- Dreamweaver CS6最新官方正式中文破解版(32位、64位)
- Ubuntu的窗口3键(最大化、最小化、关闭)消失解决办法
- 通过USB数据线实现Android端与PC端的通信
- POJ3020Antenna Placement(最小路径覆盖+重在构图)
- php 去掉字符串的最后一个字符
- C++primer plus第六版课后编程练习答案7.7
- 借助red5简单实现视频直播
- Linux crontab定时执行任务 命令格式与详细例子