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?
中文题目:
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
分析:
过程如下图所示:
step1:
step1的结果为:
step2:
step2的结果为:
step3:
step4:
上图的圆圈中的元素按照上述顺序互换
这样,一层结束了;
step5:
在二维数组的内层继续执行step1–step4,直到最内层结束;
代码如下:
class Rotate {
public:
void swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
if(n == 1 || n == 0)
return mat;
int up = 0;
int right = n-1;
int down = n-1;
int left = 0;
while(up < down && left < right)
{
//1,2 swap
int begin1 = up + 1;
for(int i = left + 1;i < right;i++)
{
swap(mat[up][i],mat[begin1++][right]);
}
//1 4 swap
begin1 = down - 1;
for(int i = left + 1;i < right;i++)
{
swap(mat[up][i],mat[begin1--][left]);
}
//3 4 swap
begin1 = up + 1;
for(int i = left + 1;i < right;i++)
{
swap(mat[down][i],mat[begin1++][left]);
}
//圆圈内的四个角上的元素互换
swap(mat[up][left],mat[up][right]);
swap(mat[up][left],mat[down][left]);
swap(mat[down][left],mat[down][right]);
up++;
down--;
left++;
right--;
}
return mat;
}
};
算法实现在数组本地实现,空间复杂度为O(1).
Rotate Image(二位数组顺时针旋转)的更多相关文章
- Python学习笔记 之 递归、二维数组顺时针旋转90°、正则表达式
递归.二维数组顺时针旋转90°.正则表达式 1. 递归算法是一种直接或间接调用自身算法的过程. 特点: 递归就是在过程或函数里调用自身 明确的递归结束条件,即递归出口 简洁,但是不提倡 递归次数多 ...
- C++ 出现bug :二位数组的操作运算,求非对角线的元素的和
编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...
- PHP 之二位数组根据某个字段排序封装
/** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- LeetCode——Rotate Image(二维数组顺时针旋转90度)
问题: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockw ...
- php二位数组合并
转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...
- 【shell】构造并遍历二位数组的一种用法
参考shell数组的部分操作用法,实现了构造和遍历二维数组的一种方式,具体如下: #数组元素以空格分割 sites=("www.a.com www.b.com www.c.com www.d ...
- shell二位数组——终端字符下降动画
猜想:Shell支持关联数组,可以利用关联数组模拟二维数组. [验证猜想] #!/bin/bash array[1,1]=1 array[2,1]=2 array[3,1]=3 for i in `s ...
- vector创建二位数组
默认初始化vector vector<vevtor<int> > arr(row, vector<int>(col, 0)); //指定行大小为row,列为col, ...
随机推荐
- Django 配置
Django 配置 运行 django-admin.py startproject [project-name] 命令会生成一系列文件,在Django 1.6版本以后的 settings.py 文 ...
- windows应急响应入侵排查思路
0x00 前言 当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解 ...
- SaltStack salt-key 命令
salt-key is used to manage Salt authentication keys [root@localhost ~]$ salt-key -L # 查看有哪些minion公钥过 ...
- Fragment切换问题
片断一: add hind @Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { switch (check ...
- [原]如何为SqlServer2008数据库分配用户
前言: 当一个项目完成后,为了数据安全,总会对该项目的数据库分配一个用户,应该说总会创建一个用户来管理这个数据库,并且这个用户只能管理这个数据库.搞了好多次,每次都忘记怎么设置,所以写一篇博文记录一下 ...
- uefi安装win7,deepin15双系统后grub没有windows选项
本帖最后由 873792861 于 2015-12-23 16:17 编辑 如题,首先电脑是GPT+uefi的,电脑上安装有64位的win7.用U盘工具制造好驱动U盘后,在安装时选择 专家模式 ,选择 ...
- ldap命令
ldapadd -x 进行简单认证 -D 用来绑定服务器的DN -h 目录服务的地址 -w 绑定DN的密码 -f 使用ldif文件进行条目添加的文件 -W 交互式输入DN的密码 ...
- PHP关于=>和->以及::的用法
1.=>的用法 在php中数组默认键名是整数,也可以自己定义任意字符键名(最好是有实际意义),如: $css=array('style'=>'0',‘color’=>‘green‘) ...
- Java 8 特性 – 终极手册
简介 毫无疑问,Java 8的发布是自Java 5(它的发布已远在2004年)以来在Java世界中最重大的事情.它带来了超多的新特性,这些特性分别被加入到Java语言本身.Java编译器.类库.工具类 ...
- cookie设置在特定时间点过期的方法
假设需求为:在当天晚上0:00过期. 方法: 得到当天晚上0:00这个时间点的一个时间. function getNextDate(){ var d = new Date(), ...