本文共 1857 字,大约阅读时间需要 6 分钟。
class Solution {//key observe: when any component is done, its beginX,endX or beginY,endX will changepublic: vector spiralOrder(vector>& matrix) { vector result; if (matrix.empty()) return result; int beginX = 0, endX = matrix[0].size() - 1; int beginY = 0, endY = matrix.size() - 1; while (true) { // From left to right for (int i = beginX; i <= endX; ++i) result.push_back(matrix[beginY][i]); if (++beginY > endY) break; // From top down for (int i = beginY; i <= endY; ++i) result.push_back(matrix[i][endX]); if (beginX > --endX) break; // From right to left for (int i = endX; i >= beginX; --i) result.push_back(matrix[endY][i]); if (beginY > --endY) break; // From bottom up for (int i = endY; i >= beginY; --i) result.push_back(matrix[i][beginX]); if (++beginX > endX) break; } return result; }};
second time
class Solution {public: vector spiralOrder(vector> &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function if(matrix.size() == 0) return vector (); int x1 = 0; int y1 = 0; int x2 = matrix.size()-1; int y2 = matrix[0].size()-1; vector ans; while(x1 <= x2 && y1 <= y2) { //up row for(int i = y1; i <= y2; ++i) ans.push_back(matrix[x1][i]); //right column for(int i = x1+1; i <= x2; ++i) ans.push_back(matrix[i][y2]); //bottom row if(x2 != x1) for(int i = y2-1; i >= y1; --i) ans.push_back(matrix[x2][i]); //left column if(y1 != y2) for(int i = x2-1; i > x1; --i) ans.push_back(matrix[i][y1]); x1++, y1++, x2--, y2--; } return ans; }};
转载地址:http://oqxti.baihongyu.com/