#pragma warning(disable:4996) #include <Windows.h> #include <tchar.h> #include <cstdio> #include <vector> using namespace std; /* submit time : 1 // But I don‘t know how to deal with "Follow up" request : You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). /☆☆☆☆☆☆☆☆☆☆☆Have no idea☆☆☆☆☆☆☆☆☆☆☆/ /☆☆ Follow up: ☆☆/ /☆☆ Could you do this in-place? ☆☆/ /☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆/ */ void rotate(vector<vector<int> > &matrix) { int n = matrix.size(); if (n <= 1) return; // use extra space int** tempMatrix = new int*[n]; for (int i = 0; i < n; ++i) tempMatrix[i] = new int[n]; int column = n - 1; vector<vector<int> >::iterator iter = matrix.begin(); for (; iter != matrix.end(); ++iter) { for (int row = 0; row < n; ++row) tempMatrix[row][column] = (*iter)[row]; --column; } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) matrix[i][j] = tempMatrix[i][j]; } for (int i = 0; i < n; ++i) delete[] tempMatrix[i]; delete[] tempMatrix; } //===================Test==================== void printMatrix(vector<vector<int> >& matrix) { for (vector<vector<int> >::iterator iterI = matrix.begin(); iterI != matrix.end(); ++iterI) { for (vector<int>::iterator iterII = (*iterI).begin(); iterII != (*iterI).end(); ++iterII) { printf("%5d ", *iterII); } printf("\n"); } printf("\n"); } void Test(vector<vector<int> >& matrix) { printf("Original:\n"); printMatrix(matrix); rotate(matrix); printf("Now:\n"); printMatrix(matrix); } void Test1() { int row1[] = { 15, 31, 25, 1, 2 }; int row2[] = { 26, 11, 4, 7, 25 }; int row3[] = { 3, 21, 101, 99, 78 }; int row4[] = { 51, 14, 18, 22, 92 }; int row5[] = { 11, 131, 4, 1, 37 }; vector<int> vec1(row1, row1 + sizeof(row1) / sizeof(int)); vector<int> vec2(row2, row2 + sizeof(row2) / sizeof(int)); vector<int> vec3(row3, row3 + sizeof(row3) / sizeof(int)); vector<int> vec4(row4, row4 + sizeof(row4) / sizeof(int)); vector<int> vec5(row5, row5 + sizeof(row5) / sizeof(int)); vector<vector<int> > matrix; matrix.push_back(vec1); matrix.push_back(vec2); matrix.push_back(vec3); matrix.push_back(vec4); matrix.push_back(vec5); Test(matrix); } void Test2() { int row1[] = { 15, 31 }; int row2[] = { 26, 11 }; vector<int> vec1(row1, row1 + sizeof(row1) / sizeof(int)); vector<int> vec2(row2, row2 + sizeof(row2) / sizeof(int)); vector<vector<int> > matrix; matrix.push_back(vec1); matrix.push_back(vec2); Test(matrix); } void Test3() { int row1[] = { 15 }; vector<int> vec1(row1, row1 + sizeof(row1) / sizeof(int)); vector<vector<int> > matrix; matrix.push_back(vec1); Test(matrix); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); Test3(); system("pause"); return 0; }
LeetCode_47rotate [Rotate Image],布布扣,bubuko.com
LeetCode_47rotate [Rotate Image]
原文地址:http://my.oschina.net/ITHaozi/blog/294069