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]
.
Note: this soluntion beats 100% C# submissions.
1 public class Solution { 2 public IList<int> SpiralOrder(int[,] matrix) { 3 int rows = matrix.GetLength(0), cols = matrix.GetLength(1); 4 var result = new List<int>(); 5 6 int upRow = 0, downRow = rows - 1, leftCol = 0, rightCol = cols - 1; 7 while (upRow <= downRow && leftCol <= rightCol) 8 { 9 if (upRow == downRow) 10 { 11 for (int j = leftCol; j <= rightCol; j++) 12 { 13 result.Add(matrix[upRow, j]); 14 } 15 break; 16 } 17 18 if (leftCol == rightCol) 19 { 20 for (int j = upRow; j <= downRow; j++) 21 { 22 result.Add(matrix[j, rightCol]); 23 } 24 break; 25 } 26 27 for (int j = leftCol; j <= rightCol; j++) 28 { 29 result.Add(matrix[upRow, j]); 30 } 31 32 for (int j = upRow + 1; j <= downRow - 1; j++) 33 { 34 result.Add(matrix[j, rightCol]); 35 } 36 37 for (int j = rightCol; j >= leftCol; j--) 38 { 39 result.Add(matrix[downRow, j]); 40 } 41 42 for (int j = downRow - 1; j > upRow; j--) 43 { 44 result.Add(matrix[j, leftCol]); 45 } 46 47 leftCol++; 48 rightCol--; 49 upRow++; 50 downRow--; 51 } 52 53 return result; 54 } 55 }