旋转一个矩阵

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Note:

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

思路:转置在中心对称线交换

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int row=matrix.size();
int col=matrix[0].size();
for(int i=0;i<row;++i){
for(int j=0;j<i;++j){
swap(matrix[i][j],matrix[j][i]);
}
}
for(int i=0;i<row;++i){
int l=0,r=row-1;
while(l<r){
swap(matrix[i][l],matrix[i][r]);
l++;r--;
}
}
}
};

原文地址:https://www.cnblogs.com/zzas0/p/10558608.html

时间: 2024-08-30 09:25:25

旋转一个矩阵的相关文章

NYOJ 598 旋转圆柱矩阵

旋转圆柱矩阵 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 将圆柱体的侧面展开能得到一个m*n的矩形.这是姑且看成一个01矩阵, 我们需要通过特定的移动得到另一个矩阵(该矩阵其中任意的某一列全部为1),每一次只能移动一行,且只能移动一位,可以向左移动,也可以向右移动,求最小的移动步数,如不能通过移动得到结果,则输出"-1". 例如: 3*5的矩阵 00001 10000 00001 我们只需要将第二行向左移动一位即可得到所求. 输入 第一行一个整数N(N

旋转正方形矩阵

Problem: 旋转正方形矩阵[题目] 给定一个整型正方形矩阵matrix, 请把该矩阵调整成顺时针旋转90度的样子. [要求] 额外空间复杂度为O(1). Solution: 同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可. 难点在于区分偶数维矩阵和奇数维矩阵的不同操作 Code: 1 #pragma once 2 3 #include <iostream> 4 using namespace std; 5 6 template<class T> 7 void Ro

c++ 知道旋转前后矩阵向量值 求旋转矩阵c++/c#代码 知道两个向量求他们的旋转矩阵

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12115244.html 知道旋转前后矩阵向量值 如何去求旋转矩阵R 的c++/c#代码??? 因为需要用到矩阵处理库所以需要先配置 一.Eigen库的配置(VS2017) Eigen库下载: http://eigen.tuxfamily.org/index.php?title=Main_Page 下载文件并解压: 然后在自己的VS工程属性中的这个附加包含进去 注意看清楚了 是D:\Depen

求一个矩阵中最大的2*2矩阵(元素和最大)的和

编程题在线编程题30分2/2最大子矩阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description:求一个矩阵中最大的2*2矩阵(元素和最大)的和.如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3和为17输入m*n的矩阵输出该m*n矩阵的最大2*2子矩阵(元素和最大)的和 样例输入 1 2 0 3 4 ; 2 3 4 5 1 

Task 4.2 求一个矩阵的最大子矩阵的和

任务:输入一个二维整形数组,数组里有正数也有负数.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). (1)设计思想:把二维矩阵分解成行.列的情况,可以相应把问题简化.之后分别依照行和列的基准来求每一个矩阵的和,再依次进行比较每个矩阵的和.最容易想到也是最容易实现的方法.遍历矩阵(行迭代器为i,列迭代器为j),以当前遍历到的元素为首a[i,j],计算二维子矩阵的和(sum=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+

顺时针输出一个矩阵

题目:顺时针输出一个矩阵(N*N). 假设一个矩阵为: 1   2   3   4 5   6   7   8 9  10 11 12 13 14 15 16 那么程序应该给出的输出为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这个问题在网上也搜集了一下答案,没有什么巧妙的办法,所以下面给出的是完全按照顺时针走向输出的一个代码(自己亲手编写,测试通过): #include <stdio.h> #define N 5 //矩阵的维度 void clockwis

matlab中如何求某一个矩阵的标准差和均值

方法: 先reshape成行向量或者列向量 然后,利用mean函数,std函数. 构造测试数据,可以利用random函数,就好.利用这个函数,可以构造不同分布的随机数列(或 矩阵). 如: >> y =random('norm',2,0.3,3,4) y = 2.1391 2.2945 2.0769 2.1751 1.9334 1.6805 1.9315 1.8912 1.8775 1.8126 1.9733 1.7686 >> rows = reshape(y,3*4,1) ro

【编程题目】求一个矩阵中最大的二维矩阵(元素和最大)

35.(矩阵)求一个矩阵中最大的二维矩阵(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)写出算法;(2)分析时间复杂度;(3)用 C 写出关键代码 早上灭小题! /* 35.(矩阵) 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用 C 写出关键代码 */ #include <stdio.h>

IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)

问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10 分析: 2*2子数组的最大和.遍历求和,时间复杂度为O(mn). 代码实现: 1 // 35.cc 2 #include <iostream> 3 #include <climits> 4 using namespace std; 5 6 int find_max(int (*a)[5], int m, int n) { 7 in