#pragma warning(disable:4996) #include <cstdio> #include <Windows.h> #include <tchar.h> #include <vector> using namespace std; /* submit time : 2 1. Runtime Error [] request : Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. */ vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> vSpiral; int rows = matrix.size(); if (rows == 0) return vSpiral; int columns = matrix[0].size(); int cnt = rows*columns; int** matrix01 = new int*[rows]; for (int i = 0; i < rows; ++i) matrix01[i] = new int[columns]; for (int i = 0; i < rows;++i) for (int j = 0; j < columns; ++j) matrix01[i][j] = 0; int row = 0, column = 0; while (cnt) { // move right while (column < columns && !matrix01[row][column]) { vSpiral.push_back(matrix[row][column]); matrix01[row][column] = 1; ++column; --cnt; } --column; ++row; // move down while (row < rows && !matrix01[row][column]) { vSpiral.push_back(matrix[row][column]); matrix01[row][column] = 1; ++row; --cnt; } --row; --column; // move left while (column >= 0 && !matrix01[row][column]) { vSpiral.push_back(matrix[row][column]); matrix01[row][column] = 1; --column; --cnt; } ++column; --row; // move up while (row >= 0 && !matrix01[row][column]) { vSpiral.push_back(matrix[row][column]); matrix01[row][column] = 1; --row; --cnt; } ++row; ++column; } return vSpiral; } //=================Test================== void printVector_int(vector<int>& vec) { vector<int>::iterator iter = vec.begin(); printf("["); for (; iter != vec.end(); ++iter) printf("%d ", *iter); printf("]\n"); } void Test(vector<vector<int> >& matrix) { vector<int> result = spiralOrder(matrix); printVector_int(result); } void Test1() { int row1[] = { 1, 2, 3 }; int row2[] = { 4, 5, 6 }; int row3[] = { 7,8,9 }; int row4[] = { 10,11,12 }; vector<vector<int> > matrix; 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)); matrix.push_back(vec1); matrix.push_back(vec2); matrix.push_back(vec3); matrix.push_back(vec4); Test(matrix); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); system("pause"); return 0; }
LeetCode_53spiralOrder [Spiral Matrix],布布扣,bubuko.com
LeetCode_53spiralOrder [Spiral Matrix]
原文地址:http://my.oschina.net/ITHaozi/blog/294247