面试6之像素(矩阵)翻转
2017-04-17 13:45
288 查看
题目描述
有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
思路:选择左上角的点和右下角的点,这两点就能确定外层的范围,先翻转外层,再左上角的点行和列都加加,右下角的点行和列都减减,继续翻转。
有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
思路:选择左上角的点和右下角的点,这两点就能确定外层的范围,先翻转外层,再左上角的点行和列都加加,右下角的点行和列都减减,继续翻转。
#include<iostream> using namespace std; #include<vector> void TransformEmage(vector< vector<int> >&mat,int upR,int upC,int downR,int downC) { int times = downC - upC; for (int i = 0; i < times; ++i) { int temp = mat[upR][upC+i]; mat[upR][upC+i] = mat[downR-i][upC]; mat[downR-i][upC] = mat[downR][downC-i]; mat[downR][downC-i] = mat[upR+i][downC]; mat[upR+i][downC] = temp; } } vector< vector<int> > TransformImage(vector< vector<int> > mat,int n) { int upR = 0; int upC = 0; //左上角的点。 int downR = n-1; //右下角的点 int downC = n-1; while (upC <= downC) { TransformEmage(mat,upR,upC,downR,downC); upR++; upC++; downR--; downC--; } return mat; } int main() { vector<int> v1; for(int i =1; i <=3; ++i) v1.push_back(i); vector<int> v2; for(int i = 4; i <= 6; ++i) v1.push_back(i); vector<int> v3; for(int i = 7; i<= 9; ++i) v1.push_back(i); vector< vector<int> > v; v.push_back(v1); v.push_back(v2); v.push_back(v3); vector<vector<int> > mat = TransformImage(v,v.size()); for (int i = 0; i < mat.size(); ++i) { for(int j = 0; j < mat[0].size();++j) cout << mat[i][j] << " "; cout <<endl; } cout << "hello..."<<endl; return 0; }
相关文章推荐
- 挑战面试编程:单词翻转、高斯公式、魔方矩阵、黑白球、3n+1
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- 一个用来翻转、旋转的矩阵类
- 一分钟了解“Matlab把矩阵边缘上的像素设置为特定值”
- 求图像矩阵的最大像素或者最小像素
- 计蒜客挑战难题:矩阵翻转
- 11.1绘制基本图形-面试例题2:绘制多个像素点和多条直线
- 像素翻转
- 百度面试:链表翻转
- flipud--矩阵上下翻转
- 矩阵操作-flip(垂直,水平或即垂直又水平翻转二维数组)
- 我的第一篇CSDN博客文章,Python代码实现矩阵翻转
- Rotate Image 顺时针翻转矩阵 两次交换 先对角线 再前后
- 牛客面试算法题精讲【个人总结】-矩阵的转圈、旋转90度、“之”字形打印
- 【每日面试题】求一个矩阵中最大的二维矩阵(元素和最大)
- 经典算法面试题目-翻转一个C风格的字符串(1.2)
- 一个小矩阵的翻转t=1为上下翻转, t=0为左右翻转
- 三维重建面试1-位姿追踪:单应矩阵、本质矩阵和基本矩阵
- 【面试】输出"蛇形"矩阵
- I:1795翻转矩阵