题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:
1.声明一个start来记录左上角的坐标
2.循环次数是行列数较小的一半
3.每次转向时应该检查边界值是否合法
代码:
using System.Collections.Generic;
class Solution
{
public List<int> printMatrix(int[][] matrix)
{
// write code here
List<int> ret = new List<int>();
if(matrix == null || matrix.Length==0)
return ret;
if(matrix[0]== null || matrix[0].Length==0)
return ret;
int start =0;
int rows = matrix.Length;
int cols = matrix[0].Length;
while(start*2<rows && start*2<cols)
{
int endx = cols - 1 - start;
int endy = rows - 1 - start;
for(int i=start; i<=endx; i++)
{
ret.Add(matrix[start][i]);
}
if(start < endy)
{
for(int i=start+1; i<=endy; i++)
{
ret.Add(matrix[i][endx]);
}
}
if(start < endy && start < endx)
{
for(int i=endx-1; i>=start; i--)
{
ret.Add(matrix[endy][i]);
}
}
if(start < endy-1 && start < endx)
{
for(int i=endy-1; i>start; i--)
{
ret.Add(matrix[i][start]);
}
}
start++;
}
return ret;
}
}