Tuesday, June 17, 2014

Spiral Matrix -- Leetcode

  1. class Solution {  
  2. //key observe: when any component is done, its beginX,endX or beginY,endX will change  
  3. public:  
  4.     vector<int> spiralOrder(vector<vector<int> >& matrix) {  
  5.         vector<int> result;  
  6.         if (matrix.empty()) return result;  
  7.         int beginX = 0, endX = matrix[0].size() - 1;  
  8.         int beginY = 0, endY = matrix.size() - 1;  
  9.         while (true) {  
  10.             // From left to right  
  11.             for (int i = beginX; i <= endX; ++i)  
  12.                 result.push_back(matrix[beginY][i]);  
  13.             if (++beginY > endY) break;  
  14.             // From top down  
  15.             for (int i = beginY; i <= endY; ++i)  
  16.                 result.push_back(matrix[i][endX]);  
  17.             if (beginX > --endX) break;  
  18.             // From right to left  
  19.             for (int i = endX; i >= beginX; --i)  
  20.                 result.push_back(matrix[endY][i]);  
  21.             if (beginY > --endY) break;  
  22.             // From bottom up  
  23.             for (int i = endY; i >= beginY; --i)  
  24.                 result.push_back(matrix[i][beginX]);  
  25.             if (++beginX > endX) break;  
  26.         }  
  27.         return result;  
  28.     }  
  29. };  

No comments:

Post a Comment