When finally check the middle line, it is checking whether the min(n, m) is odd or even number.
1 class Solution { 2 public: 3 vector<int> spiralOrder(vector<vector<int> > &matrix) { 4 vector<int> result; 5 if (matrix.size() == 0) return result; 6 int n = matrix.size(), m = matrix[0].size(), rec = min(n, m)/2; 7 for (int i = 0; i < rec; i++) { 8 for (int j = i; j < m-i-1; j++) result.push_back(matrix[i][j]); 9 for (int j = i; j < n-i-1; j++) result.push_back(matrix[j][m-i-1]); 10 for (int j = m-i-1; j > i; j--) result.push_back(matrix[n-i-1][j]); 11 for (int j = n-i-1; j > i; j--) result.push_back(matrix[j][i]); 12 } 13 if (rec*2 != min(m, n)) { 14 if (n > m) { 15 for (int i = rec; i <= n-rec-1; i++) result.push_back(matrix[i][m/2]); 16 } else { 17 for (int i = rec; i <= m-rec-1; i++) result.push_back(matrix[n/2][i]); 18 } 19 } 20 return result; 21 } 22 };