LeetCode Online Judge 题目C# 练习 - Sprial Matrix
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].
1 public static List<int> SprialMatrix(List<List<int>> matrix) 2 { 3 if (matrix.Count == 0) 4 return null; 5 6 int m = matrix.Count - 1; 7 int n = matrix[0].Count - 1; 8 9 List<int> ret = new List<int>(); 10 //one row 11 if (m == 0) 12 { 13 return matrix[0]; 14 } 15 //one column 16 if (n == 0) 17 { 18 for (int i = 0; i <= m; i++) 19 { 20 ret.Add(matrix[i][0]); 21 } 22 return ret; 23 } 24 25 for (int i = 0; i <= (Math.Min(m ,n)) / 2; i++) 26 { 27 for (int col = i; col <= n - i; col++) 28 { 29 ret.Add(matrix[i][col]); 30 } 31 for (int row = i + 1; row <= m - i; row++) 32 { 33 ret.Add(matrix[row][n - i]); 34 } 35 if (m - i > i) 36 { 37 for (int col = n - i - 1; col >= i; col--) 38 { 39 ret.Add(matrix[m - i][col]); 40 } 41 } 42 if (n - i > i) 43 { 44 for (int row = m - i - 1; row > i; row--) 45 { 46 ret.Add(matrix[row][i]); 47 } 48 } 49 } 50 51 return ret; 52 }
代码分析:
就是Amazon电面我的题,当时弱爆的我只是瞎写一通。虽然现在还是弱爆,但是,应该能跌跌撞撞写出来。
两个corner case. 只有一行,只有一列。
分四部分打印一个环。上行,右列,下行,左列,打印下行,左列的时候要判断还有没有东西,不然会重复打印了上行和右列。