给定一个矩阵,需要以顺时针的方向将矩阵遍历出来,如下图所示。
public static ArrayList printMatrix(int[,] matrix)
{
int rows = matrix.GetLength(0);
int columns = matrix.GetLength(1);
ArrayList list = new ArrayList();
int start = 0;
//循环继续的条件是目标矩阵行数大于循环开始的行数的两倍,同时目标矩阵列数大于循环开始的列数的两倍
while(rows>start*2 && columns > start * 2)
{
//每一圈最后一行下标
int endrow = rows - start - 1;
//每一圈最后一列下标
int endcolumn = columns - start - 1;
//从左到右
for(int i = start; i <= endcolumn; i++)
{
list.Add(matrix[start,i]);
}
//从上到下
if (endrow > start)
{
for(int i = start + 1; i <=endrow; i++)
{
list.Add(matrix[i,endcolumn]);
}
}
//从右到左
if(endrow>start && endcolumn > start)
{
for(int i = endcolumn - 1; i >= start; i--)
{
list.Add(matrix[endrow,i]);
}
}
//从下到上
if (endrow >= start + 2 && endcolumn > start)
{
for(int i = endrow - 1; i > start; i--)
{
list.Add(matrix[i,start]);
}
}
start++;
}
return list;
}