1 /* 2 题目描述: 3 有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。 4 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。 5 测试样例: 6 [[1,2,3],[4,5,6],[7,8,9]],3 7 返回:[[7,4,1],[8,5,2],[9,6,3]] 8 */ 9 /*10 将矩阵顺时针旋转90度11 一圈一圈的进行旋转(交换)。12 eg:13 1 2 314 4 5 615 7 8 916 先旋转外圈:17 首先交换1->3->9->7->1;18 然后交换2->6->8->4->2;19 */20 #include21 #include 22 using namespace std;23 24 void rotateEdge(vector > &m, int tr, int tc, int dr, int dc){25 int times = dc - tc;26 int tmp = 0;27 for (int i = 0; i < times; i++){28 tmp = m[tr][tc+i];29 m[tr][tc+i] = m[dr-i][tc];30 m[dr-i][tc] = m[dr][dc-i];31 m[dr][dc-i] = m[tr+i][dc];32 m[tr+i][dc] = tmp;33 }34 }35 vector > rotateMatrix(vector > mat, int n) {36 // write code here37 int tR = 0;38 int tC = 0;39 int dR = n-1;40 int dC = n-1;41 while (tR < dR){42 rotateEdge(mat, tR++, tC++, dR--, dC--);43 }44 return mat;45 }46 int main(){47 vector > matrix;48 vector a;49 a.push_back(1);50 a.push_back(2);51 a.push_back(3);/*52 a.push_back(4);*/53 matrix.push_back(a);54 55 vector b;56 b.push_back(4);57 b.push_back(5);58 b.push_back(6);/*59 b.push_back(8);*/60 matrix.push_back(b);61 62 vector c;63 c.push_back(7);64 c.push_back(8);65 c.push_back(9);/*66 c.push_back(12);*/67 matrix.push_back(c);68 69 vector > rt;70 rt = rotateMatrix(matrix,3);71 for (int i = 0; i < 3; i++){72 for (int j = 0; j < 3; j++)73 cout << rt[i][j] << ",";74 cout << endl;75 }76 return 0;77 }