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 SpiralOrder(int[,] matrix) { 3 int rows = matrix.GetLength(0), cols = matrix.GetLength(1); 4 var result = new List (); 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 }