每日算法37: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度。由于要求空间复杂度是常数,因此应该迭代旋转操作。
class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int n = matrix.size();
        int layers = n/2;//图像旋转的圈数
        for(int layer = 0;layer < layers;layer++)//每次循环一层,右青色到紫色
         for(int i = layer;i<n-1-layer;i++)//每次可以交换四个元素的位置
         {
             int temp = matrix[i][layer];//不清楚绘图举例就可以
             matrix[i][layer] = matrix[n-1-layer][i];
             matrix[n-1-layer][i] = matrix[n-1-i][n-1-layer];
             matrix[n-1-i][n-1-layer] = matrix[layer][n-1-i];
             matrix[layer][n-1-i] = temp;
          }
    }
};
以下是网友给出的还有一种方案:
class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int i,j,temp;
        int n=matrix.size();
        // 沿着副对角线反转
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n - i; ++j) {
                temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][n - 1 - i];
                matrix[n - 1 - j][n - 1 - i] = temp;
            }
        }
        // 沿着水平中线反转
        for (int i = 0; i < n / 2; ++i){
            for (int j = 0; j < n; ++j) {
                temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - i][j];
                matrix[n - 1 - i][j] = temp;
            }
        }
    }
};
版权声明:本文博主原创文章。博客,未经同意不得转载。
每日算法37:Rotate Image (图像旋转)的更多相关文章
- [google面试CTCI] 1-6.图像旋转问题
		[字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ... 
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
		常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ... 
- Opencv2.4.4作图像旋转和缩放
		关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ... 
- pyhton:图像旋转
		最近一个作业中要用到图像旋转,分享一下学习过程.如有讲错的地方,恳请指正! 图像旋转,想想真简单啊,不就是将图像矩阵乘上一个旋转平移矩阵就完了吗?实际上还真没这么简单.首先这个旋转平移矩阵怎么获得?通 ... 
- 图像旋转、伸缩的自写matlab实现
		一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ... 
- OpenCV 图像旋转实现
		1 旋转矩形 首先建议阅读图像旋转算法原理-旋转矩阵,这篇博客可以让你很好地理解图像中的每一个点是如何进行旋转操作的.其中涉及到了图像原点与笛卡尔坐标原点之间的相互转换以及点旋转的一些公式推导. 这里 ... 
- PIE SDK图像旋转
		1.算法功能简介 图像旋转可使图像以中心点为轴沿特定方向旋转指定的角度. PIESDK支持算法功能的执行,下面对图像旋转算法功能进行介绍. 2.算法功能实现说明 2.1 实现步骤 第一步 算法参数设置 ... 
- SIFT算法总结:用于图像搜索
		原始文章链接:http://bubblexc.com/y2011/163/ 原文链接:http://blog.csdn.net/cserchen/article/details/5606859 关于三 ... 
- OpenCV图像旋转
		图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸.图像旋转后图像的水平对称轴.垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换. 如下图: 假 ... 
随机推荐
- SNMP WINDOWS系统的命令行工具下载
			SNMP windows系统的命令行工具snmputil.exe下载链接:请点击 
- 一个简单的样例看明确怎样利用window.location.hash实现ajax操作时浏览器的前进/后退功能
			我们知道JavaScript中非常早就提供了window.history对象,利用history对象的forward().go().back()方法可以方便实现不同页面之间的前进.后退等这样的导航功能 ... 
- HDU 4864Task(更多的联合培训学校1)(贪婪)
			职务地址:pid=4864">HDU4864 这题又是一上来觉得是最小费用流,可是边太多.果然,敲完交上去后不断TLE.. 小优化了两次也没过. . . sad.. 后来看了题解才发现 ... 
- ftk学习记录(多形式的文章)
			[声明:版权全部.欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在上周末的博客中,我们谈到了list view,今天能够看看效果图怎样. 假设大家细心一点,能够 ... 
- JAVA设计模式--辛格尔顿
			Singleton模式可以作为一种编程技术,让我们先从理论上说代码 单例模式三个关键点: 1).某个类仅仅能有一个实例 2).该类必须自行创建这个实例 3).该类必须自行向整个系统提供这个实例 应用场 ... 
- 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法
			课程视频 单例模式 建造者VS工厂方法 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客, ... 
- codeforces 236A . Boy or Girl(串水问题)
			A. Boy or Girl 点击打开题目 time limit per test 1 second memory limit per test 256 megabytes input standar ... 
- (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作
			本节联练习主要有: 1.环境介绍 2.常用 Shell 命令及快捷键 3.Linux 使用小技巧 一.Linux 桌面环境介绍 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形 ... 
- HDU  4085 Steiner树模板称号
			Dig The Wells Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ... 
- linux下一个Oracle11g RAC建立(四)
			linux下一个Oracle11g RAC建立(四) 三.配置共享存储 配置ASM管理准备 1)OCRDISK :存储CRS资源配置信息 2)VOTEDISK:仲裁盘.记录节点状态 3)DataDis ... 
