给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
思路:设置四个边界,上下左右边界,然后从上到右到下到左将二维数组元素添加到结果中,然后每次都缩小或增加边界进行内部层。
代码:c#
public class Solution {
public IList<int> SpiralOrder(int[][] matrix) {
int m=matrix[0].Length,n=matrix.Length;//矩阵行和列数
int right=m-1,bottom=n-1,left=0,top=0;//四个边界
IList<int>result=new List<int>();//要返回的结果
int amount=m*n;矩阵元素总个数
while(amount>0)存完全部矩阵元素个数停止
{
//从左上角到右上角
for(int lie=left;lie<=right&&amount>0;lie++)
{
result.Add(matrix[top][lie]);
amount--;
}
top++;//上面一层遍历完了,上边界++即往下面移动一层,下次就是遍历上面第二层
for(int hang=top;hang<=bottom&&amount>0;hang++)
{
result.Add(matrix[hang][right]);
amount--;
}
right--;//右边一层遍历完了,右边界往往左边移动一层
for(int lie=right;lie>=left&&amount>0;lie--)
{
result.Add(matrix[bottom][lie]);
amount--;
}
bottom--;//下边界遍历完了,往上面移动一层
for(int hang=bottom;hang>=top&&amount>0;hang--)
{
result.Add(matrix[hang][left]);
amount--;
}
left++;//左边界遍历完了,往右边移动一层
}
return result;//返回结果
}
}