O(1)空间复杂度实现n*n矩阵旋转90度

O(1)空间复杂度实现n*n矩阵旋转90度,

#include <iostream>
using namespace std;

#define ARRAY_SIZE 5

void print_two_array (int a[][ARRAY_SIZE]) {
cout << endl;
   for (int i=0; i<ARRAY_SIZE; i++) {
for (int j=0; j<ARRAY_SIZE; j++) {
   cout << a[i][j] << ",";
}
cout << endl;
}
cout << endl;
}

void in_place_retation (int a[][ARRAY_SIZE]) {
   int swap = 0;
const int n = ARRAY_SIZE;
for (int k=0; k<n/2; k++) {
   for (int i=k; i<n-k-1; i++) {
   swap = a[k][i];
a[k][i] = a[i][n-k-1];
a[i][n-k-1] = a[n-k-1][n-i-1];
a[n-k-1][n-i-1] = a[n-i-1][k];
a[n-i-1][k] = swap;
//print_two_array(a);
}
//print_two_array(a);
}
}

int main () {
int a[ARRAY_SIZE][ARRAY_SIZE] = {
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25
};

print_two_array(a);
in_place_retation(a);

print_two_array(a);
}
时间: 2024-08-24 10:32:54

O(1)空间复杂度实现n*n矩阵旋转90度的相关文章

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

二维数组(矩阵)之将矩阵旋转90度

将矩阵旋转90度: 题目描述: 例如将一个5*5的矩阵顺时针旋转90度:旋转前 1       2        3         4         5 6       7        8         9        10 11    12      13      14       15 16    17      18      19       20 21    22      23      24       25 选转后: 21     16      11       6

CC150:将一个矩阵旋转90度

一张图像表示成n X n的矩阵,写一个函数把图像旋转90度.不开辟额外的存储空间 我们假设要将图像逆时针旋转90度.原图如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 逆时针旋转90度后的图应该是: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 我们要如何原地进行操作以达到上面的效果呢?可以分两步 第一步交换主对角线两侧的对称元素, 第二步交换第i行和第n-1-i行,即得到结果. 看图示: 原图:           第一

矩阵旋转90度

初始化矩阵 void initial_square_matrix(int * * * pm, int n) { pm[0] = new int *[n]; for (int i = 0; i < n; i++) { pm[0][i] = new int[n]; for (int j = 0; j < n; j++) pm[0][i][j] = i * n + j + 1; } } 销毁矩阵 void destroy_square_matrix(int * * * pm, int n) { fo

算法题:矩阵旋转90度

#include <iostream> #include <iomanip> using namespace std; void Grial(int (*a)[5],int n) { //数组顺时针旋转90度. //边界值的考虑让我小小的思考了一下. int temp; int startX = 0; int startY = 0; int j = 0; while (startX < n/2) { startX = j; for (int i = j; i < n -

矩阵逆时针旋转90度,空间复杂度O(1)

将一个矩阵逆时针旋转90度,首先可以沿左上角-右下角斜对角线,进行上下交换数据,然后上下数据交换即可. 1 #include <stdio.h> 2 #include <stdlib.h> 3 //矩阵逆时针旋转90度 4 int main() 5 { 6 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 7 int b[3][3]; 8 int i; 9 int j; 10 int temp; 11 printf("原始矩阵\n")

opencv图像原地(不开辟新空间)顺时旋转90度

前一阵朋友碰到这么一道题:将图像原地顺时针旋转90度,不开辟新空间.此题看似平易(题目简短),仔细研究发现着实不容易.经过一番探索后,终于找到了正确的算法,但是当使用opencv实现时,有碰到了困难而且费了一番周折才找到问题所在. 首先,解决这个问题,先简化成原地90度旋转一M×N的矩阵A(注意不是N×N方阵).对于2×3的矩阵A = {1,2,3;4,5,6},其目标为矩阵B = {4,1;5,2;6,3}.因为是原地旋转,这里A和B应指向同一大小为6的内存空间. 这里有这样一个重要的导出公式

利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题

html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正. 利用exif.js读取照片的拍摄信息,详见  http://code.ciaoca.com/javascript/exif-js/ 这里主要用到Orientation属性. Orientation属性说明如下: 旋转角度 参数 0° 1 顺时针90° 6 逆时针9

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+