螺旋式遍历矩阵
如下图所示的方法。
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].
思路
递归实现
code
public class Solution
{
private IList<int> rtn = new List<int>();
public IList<int> SpiralOrder(int[,] matrix)
{
int m = matrix.GetUpperBound(0); //row index upper bound
int n = matrix.GetUpperBound(1); //
spiral(matrix, 0, n, m, 0);
return rtn;
}
public void spiral(int[,] matrix, int top, int right, int bottom, int left)
{
if (top > bottom || left > right) return;
//add first row
for (int j = left; j <= right; j++)
rtn.Add(matrix[top, j]);
//add last column
for (int i = top + 1; i <= bottom; i++)
rtn.Add(matrix[i, right]);
//add last row
for (int j = right - 1; j >= left && top!=bottom; j--)
rtn.Add(matrix[bottom, j]);
//add first column
for (int i = bottom - 1; i > top && left!=right; i--)
rtn.Add(matrix[i, left]);
spiral(matrix, top + 1, right - 1, bottom - 1, left + 1);
}
}